【题目描述】
求两个不超过200位的非负整数的和。
【输入】
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
【输出】
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
【输入样例】
22222222222222222222
33333333333333333333
【输出样例】
55555555555555555555
【参考程序】
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
#define SIZE 2001
int main() {
char a1[SIZE], b1[SIZE];
int x, lena, lenb, lenc, a[SIZE], b[SIZE], c[SIZE];
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
memset(c, 0, sizeof(c));
gets(a1);
gets(b1);
lena = strlen(a1);
lenb = strlen(b1);
for (int i=0; i<lena; i++) {
a[lena-i] = a1[i] - 48; // 将字符串a1转存到整型数组a,且倒序存储
}
for (int i=0; i<lenb; i++) {
b[lenb-i] = b1[i] - '0';
}
x = 0; // 进位x初始化为0
lenc = 1; // 从第一位加起
while (lenc<=lena || lenc<=lenb) { // 判断两个大整数是否都还没有算完
c[lenc] = a[lenc] + b[lenc] + x; // x表示前一次的进位
x = c[lenc] / 10; // 计算进位
c[lenc] %= 10; // 求相加后的数的个位
lenc++; // 计算下一位数
}
c[lenc] = x;
while (c[lenc] == 0) { // 去掉多余的0
lenc--;
}
for (int i=lenc; i>=1; i--) {
cout << c[i];
}
return 0;
}