ocrosoft Contest1316 - 信奥编程之路~~~~~第三关 问题 K: 大整数加法
http://acm.ocrosoft.com/problem.php?cid=1316&pid=10
题目描述
求两个不超过200位的非负整数的和。
输入
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
输出
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
样例输入
22222222222222222222
33333333333333333333
样例输出
55555555555555555555
代码:
#include <bits/stdc++.h> 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; }