2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

各桁の和をpython, C++で実行する

Posted at

各桁の和をpython, C++で実装するためのメモです。
普段はpythonをメインに使っていますが、勉強中のC++でどうかけるかを考えたので共有したいと思います。

pythonの場合

pythonであれば、以下のように短くかけて簡単です。

List = list(map(int, str(n))))
ans = sum(List)

ただし、nは入力した数字を指します。
1行目では文字列にしたnに対して、各位の数字を一個ずつint型に変換してlistに格納します。その後、2行目でsum関数を使って総和をとるという形です。

例えばn=12345という数字の場合、

List = [1,2,3,4,5] #1行目  List = list(map(int, str(n))) の結果
ans = 15 #2行目  ans = sum(List) の結果

という感じです。

C++の場合(イテレータを使う方法)

上記の内容と同じことをC++でもやりたいと思います。すなわち、文字列の各位をintに直して足していくというものです。

int digit_sum(string n){
    int sum = 0;
    for(auto itr=n.begin();itr < n.end();itr++){
        sum += *itr - '0'; // *itrはchar型のため、数値に直すには'0'で引き算する。
    }
    return sum;
}
int main(){
    string n= "12345";
    cout << digit_sum(n) << endl;
}

ここではイテレータitrを使いました。数字列の各位の値は*itrで取得できます。ただし注意として、各位の値はchar型として得られるので、整数の数値に直す必要があります。その操作が

sum += *itr - '0';

に相当します。

C++を用いた別の方法(イテレータを使わない方法)

以下のような求め方の記事をしばしば目にします。

int digit_sum(int n){
    int sum = 0;
    while(n){
    sum += n%10;
    n /= 10; 
    }
    return sum;
}

例えばn=123の場合、while文で以下のような操作が実行されます。

123%10 = 3 -> sumに追加
123/10 = 12

12%10 = 2  -> sumに追加
12/10 = 1

1%10 = 1 -> sumに追加
1/10 = 0 //終了

こっちはイテレータを使わないので、イテレータに慣れてない僕にとってはわかりやすかったです。

まとめ

各位の和を求める方法をまとめました。単純な内容でしたが、色々な解法を見れて楽しかったですし、イテレータに慣れる良い機会になりました。
少しでも有益になれば幸いです。また、間違いや不正確な部分があれば教えていただけると幸いです。

参考

char型をint型に変換する方法と注意【数値化 キャスト 文字列変換】

各桁の和の求め方

2
1
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?