题目描述
比利经常会碰到超大整数的加法运算,而普通的计算器上无法进行。因此他想你帮他写一个程序来计算结果。
输入
输入数据有多组。首先输入一个整数T,表示有T组输入。
每组输入两个大整数,并用空格隔开。每个整数最多1000位。没有负数输入。
输出
对于每组输入,输出两个整数的和,单独占一行。
样例输入
2
1 2
112233445566778899 998877665544332211
样例输出
3
1111111111111111110
#include<iostream> #include<string> #include<algorithm> using namespace std; int main() { int t; cin >> t; string s; while (t--) { string a, b; cin >> a >> b; if (a.size()<b.size()) swap(a, b); int len = a.size() - b.size(); if (len){ string b2(len, '0'); b = b2 + b; }//补齐,不够用零。 s = a; int carry = 0; //reverse(a.begin(), a.end()); //reverse(b.begin(), b.end());刚开始想反转在加,到最后解决不了最后一个进位,所以没办法。 for (int i = a.size() - 1; i >= 0; i--) { s[i] = (a[i] - '0' + b[i] - '0' + carry) % 10 + '0'; carry = (a[i] - '0' + b[i] - '0' + carry) / 10; }//这个加零和减零,特别容易弄混。-‘0’是字符转数字,+‘0’是字符转数字;亦可调用stoic(),不过需要c.str()函数与string与char的转换。 //reverse(s.begin(),s.end()); if (carry>0) { s = "1" + s; } // cout << s << endl; } return 0; }//我没用弄明白那个定义变量与{}是否有关系,应该是有关系。