C言語における長桁の差問題について
ここに質問の内容を詳しく書いてください。
標準入力に100桁以下の2つの正の整数値 ????,????(????≧????) をこの順で入力すると,それらの差(????−????)を計算して標準出力に出力するプログラムを作成しているのですが、桁数を大きくすると毎回ランダムな値が出てしまいます。
1*10の16乗まではちゃんと出ますが、それ以降になると毎回出力される値が変わってしまいます。
例えば、
1000000000000000000 - 1 = 毎回ランダムな数字
原因が分からないので、教えていただければと思います。
エラーメッセージ
該当のソースコード
#include <stdio.h> #include <string.h> #define DIGIT 100 int main(void){ char a[DIGIT], b[DIGIT], sum[DIGIT+1], num[DIGIT]; int i, na, nb, n, r, l; scanf("%s", num); na = strlen(num); for (i=0; i<na; i++) { a[na-1-i] = num[i] - '0'; } scanf("%s", num); nb = strlen(num); for (i=0; i<nb; i++) { b[nb-1-i] = num[i] - '0'; } r = 0; for (i=0; i<na; i++) { if (a[i] >= b[i]) { r = a[i]-b[i]; } else if(a[i] == 0) { r = 10 -b[i]; a[i+1] -= 1; } else if(a[i] < b[i]) { r = a[i]+10-b[i]; a[i+1] -= 1; } sum[i] = r; } sum[i] = a[i]; l = strlen(sum); for (i=l-1; i>=0; i--) { if(sum[l-1]==0) { continue; } printf("%d", sum[i]); } printf("\n"); }
回答3件
あなたの回答
tips
プレビュー