各桁の和を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 //終了
こっちはイテレータを使わないので、イテレータに慣れてない僕にとってはわかりやすかったです。
まとめ
各位の和を求める方法をまとめました。単純な内容でしたが、色々な解法を見れて楽しかったですし、イテレータに慣れる良い機会になりました。
少しでも有益になれば幸いです。また、間違いや不正確な部分があれば教えていただけると幸いです。
参考