大整数加法(信息学奥赛一本通-1168)
【题目描述】
求两个不超过200位的非负整数的和。
【输入】
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
【输出】
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
【输入样例】
22222222222222222222
33333333333333333333【输出样例】
55555555555555555555
【题解代码】
#include<bits/stdc++.h>
using namespace std;
const int N = 210;
int a[N], b[N], c[N];
int main()
{
string s1, s2; cin >> s1 >> s2;
int aindex = 1, bindex = 1;
int la = 1, lb = 1, lc = 1;
for (int i = s1.size(); i >= 0; i--)
{
a[aindex++] = s1[i] - '0';
if (s1[i] == '0') la = aindex - 1;
}
for (int i = s2.size(); i >= 0; i--)
{
b[bindex] = s2[i] - '0';
if (s2[i] == '0') lb = bindex - 1;
}
lc = max(aindex, bindex) + 1;
for (int i = 1; i <= lc; i++)
{
c[i] += a[i] + b[i];
c[i + 1] = c[i] / 10;
c[i] %= 10;
}
while (!c[lc] && lc > 1) lc--;
for (int i = lc; i >= 1; i--)cout << c[i];
return 0;
}