杭電ACM1002題
阿新 • • 發佈:2019-01-29
#include <iostream> using namespace std; const int N = 1000; int main() { char a[N], b[N]; int sum[N] = {0}; int t, m, n, l, i, r; r = 1;// 次數 cin >> t; while (t--) { cin >> a >> b; m = strlen(a); n = strlen(b); l = m > n ? m : n; if (m <= N && n <= N) { if (m >= n) { for (i = 0; n > 0; m--, n--, i++) { sum[i] = sum[i] + (a[m-1] - '0') + (b[n-1] - '0'); if (sum[i] > 9) { sum[i+1]++; sum[i] -= 10; } } for (; m > 0; m--, i++) { sum[i] = sum[i] + (a[m-1] - '0'); if (sum[i] > 9) { sum[i+1]++; sum[i] -= 10; } } } else { for (i = 0; m > 0; m--, n--, i++) { sum[i] = sum[i] + (a[m-1] - '0') + (b[n-1] - '0'); if (sum[i] > 9) { sum[i+1]++; sum[i] -= 10; } } for (; n > 0; n--, i++) { sum[i] = sum[i] + (b[n-1] - '0'); if (sum[i] > 9) { sum[i+1]++; sum[i] -= 10; } } } } if (sum[i] == 0) { i--; } cout << "Case " << r << ":" << endl; cout << a << " + " << b << " = "; for(;i>=0;i--) { cout<<sum[i]; } if (t) cout << endl << endl; else cout << endl; for (i = 0; i <= l; i++) { sum[i] = 0; } r++; } return 0; }
做完這道題才知道這叫“大數相加”,程式設計知識是有多薄弱啊!
這個題目有兩個關鍵點:
1.整數長度不超過1000,這就是為什麼叫“大數”的原因吧。不能用int之類的,會溢位。
2.程式碼弄完之後,在杭電的OJ上面一直出現“Presention Error”。最後是在百度以後才知道,因為最後一次輸出完後是沒有空行的,對應在程式中else部分的差別。