motu*2

DIV1目指して問題を解き続ける

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;
}