大整数加法
题目
输入
输入数据有多组。首先输入一个整数T,表示有T组输入。
每组输入两个大整数,并用空格隔开。每个整数最多1000位。没有负数输入。
输出
对于每组输入,输出两个整数的和,单独占一行。
样例输入
2
1 2
112233445566778899 998877665544332211
样例输出
3
1111111111111111110
解题思路
这个整体思路大家都知道,要注意的点就是在边界情况的处理上,比如进位的操作,最高位进位判断这些。还有可能有前导0的情况;
参考代码
#include<bits/stdc++.h>
using namespace std;
string get_add(string a, string b) {
int i, add = 0, len = max(a.length(), b.length());
int nums[1001] = {0};
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
for(i = 0; i < len; i++) {
int num1 = (i < a.length()) ? (a[i]-'0') : 0;
int num2 = (i < b.length()) ? (b[i]-'0') : 0;
int num = num1 + num2 + add;
nums[i] = num % 10;
add = num / 10;
}
if(add > 0) // 处理最高位进位
nums[i] = add;
string c;
while(i >= 0) { // 数组逆序拼接得到结果
c += to_string(nums[i]);
i--;
}
if(c[0] == '0' && c.length() > 1) // 移除前导0
c.erase(0, 1);
return c;
}
int main() {
int T;
cin >> T;
string a, b;
getline(cin, a);
while(T--) {
cin >> a >> b;
string c = get_add(a, b);
cout << c << endl;
}
return 0;
}