前提・実現したいこと
以下のプログラムコードで行いたいのが、
・10文字以内の数字列を入力
・数字列の1つ1つの数字をそれぞれ1桁の数値に変換しその合計を求める
・合計値の1の位の数を数字列の最後尾に追加して出力
例)入力数値:54321 合計:5+4+3+2+1=15(1の位の数は5) 出力:543215
というものです。配列strに入力した数字列をatoi関数で数値に変換したいのですがオーバーフローが起こってしまいます。以下の実行結果の例で言うと、2を10個足した総和が20で1の位は0なので出力結果は22222222220とさせたいのですが2222222222-8と出力されてしまいます。どこを改善すればよいのかよくわからないので教えていただきたいです。よろしくお願いいたします。
該当のソースコード
#include <stdio.h> int main() { char str[11]; //入力数字列(10文字まで) int keta; //各桁の数字 int sum = 0; //数字列の各桁の数字の総和 int ichi; //総和の1の位の数 int num; //計算用変数 printf("10文字以内の数字を入力してください => "); scanf("%s", str); printf("%s", str); num = atoi(str); while(num){ keta = num % 10; sum = sum + keta; num = num / 10; } ichi = sum % 10; printf("%d\n", ichi); return 0; }
###実行結果
10文字以内の数字を入力してください => 2222222222 2222222222-8
回答3件
あなたの回答
tips
プレビュー