http://acm.ocrosoft.com/problem.php?cid=1316&pid=10
题目描述
求两个不超过200位的非负整数的和。
输入
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
输出
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
样例输入
22222222222222222222
33333333333333333333
样例输出
55555555555555555555
代码:
#include
using namespace std;
#define N 1001
int main() {
char ch1[N], ch2[N];
int num1[N], num2[N];
int len1, len2, j, maxx, k ;
memset(ch1, 0, sizeof(ch1));
memset(ch2, 0, sizeof(ch2));
memset(num1, 0, sizeof(num1));
memset(num2, 0, sizeof(num2));
scanf("%s", ch1);
scanf("%s", ch2);
len1 = strlen(ch1);
len2 = strlen(ch2);
k = 0;
for(int j = len1 - 1; j >= 0; j--)
num1[k ++] = ch1[j] - '0';
k=0;
for(int j = len2 - 1; j >= 0; j--)
num2[k ++] = ch2[j] - '0';
maxx = len1 > len2 ? len1 : len2;
for(int j = 0; j < maxx; j ++){
num1[j] += num2[j];
if(num1[j] >= 10) {
num1[j] -= 10;
num1[j + 1] ++;
}
}
if(num1[maxx])
printf("%d", num1[maxx]);
for(int j = maxx - 1; j >= 0; j --)
printf("%d", num1[j]);
printf("\n");
return 0;
}