AOJ 0015 National Budget
概要
80桁までの整数が二つ与えられる。
その和を出力する。
80桁を超える場合は"overflow"を出力する。
解法
unsigned intだと(0 ~ 4294967295)
unsigned long longだと(0 ~ 18446744073709551615)
なので80桁の整数は扱えない。
文字列で読み込んで下から順に計算していく。
JavaだとBigIntegerで簡単にできます。
コード
#include <iostream> #include <cstdio> #include <cstring> #include <vector> #include <algorithm> #include <string> using namespace std; int main() { int n; cin >> n; for (int i = 0; i < n; i++) { string s1, s2, ans = ""; cin >> s1 >> s2; int len1 = s1.length() - 1; int len2 = s2.length() - 1; int mlen = max(len1, len2); int pre = 0; for (int i = 0; i <= mlen; i++) { int sum = pre; sum += (len1 >= 0) ? s1[len1--] - '0' : 0; sum += (len2 >= 0) ? s2[len2--] - '0' : 0; pre = sum / 10; sum -= pre * 10; ans += '0' + sum; } if (pre > 0) ans += '0' + pre; reverse(ans.begin(), ans.end()); if (ans.length() > 80) { puts("overflow"); } else { cout << ans << endl; } } return 0; }