求两个不超过200位的非负整数的和。
输入
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
输出
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
样例输入
22222222222222222222
33333333333333333333
样例输出
55555555555555555555
思路:确定两数中的最长位数,将位数小的数字前面补 0 ,接着就是小学加减法套路,由右至左上下相加,满十进一
(哭笑)忘考虑输入多位 0 的情况了,活生生地检查了六七遍代码。
代码:
#include<string>
#include<iostream>
using namespace std;
int main(){
string a, b; cin >> a >> b;
int na = a.length(), nb = b.length();
int n;
na > nb ? n = na : n = nb;//确定最长的数字长度
while (a.size() != n)//小位补零
a = "0" + a;
while (b.size() != n)
b = "0" + b;
int c = 0;
string tem = "";
for (int i = n - 1; i >= 0; i--) {//小学加法
tem += ((c + (a[i] - '0') + (b[i] - '0')) % 10 + '0');
c = (c + (a[i] - '0') + (b[i] - '0')) / 10;
}
tem += (c + '0');
int k;
for (k = tem.length() - 1; k >= 0; k--)//确定前导 0 的位置
if (tem[k] != '0')
break;
if (k==-1)//漏掉的 000 + 0000 情况
cout << "0";
else
for (int i = k; i >= 0; i--)
cout << tem[i];
cout << endl;
}