10:大整数加法
总时间限制:
-
描述
-
求两个不超过200位的非负整数的和。
输入
- 有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。 输出
- 一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。 样例输入
-
22222222222222222222 33333333333333333333
样例输出
-
55555555555555555555
-
#include <iostream> #include <vector> #include <stdio.h> #include <algorithm> #include <iomanip> #include <string> #include <cstdio> #include <string.h> #include <set> #include <cmath> #include <map> #include <stack> #include <stdlib.h> #define MAX_LEN 200 //using namespace std; char c1[MAX_LEN + 10]; char c2[MAX_LEN + 10]; int n1[MAX_LEN + 10]; int n2[MAX_LEN + 10]; int main() { //freopen("in.txt", "r", stdin); //freopen("out.txt", "w", stdout); scanf("%s", c1); scanf("%s", c2); memset(n1, 0, sizeof(n1)); //有多个测试用例 memset(n2, 0, sizeof(n2)); int j = 0; int len_c1 = strlen(c1); for(int i = len_c1 - 1; i >= 0; i--){ n1[j++] = c1[i] - '0'; } j = 0; int len_c2 = strlen(c2); for(int i = len_c2 - 1; i >= 0; i--){ n2[j++] = c2[i] - '0'; } for(int i = 0; i < MAX_LEN; i++){ n1[i] += n2[i]; if(n1[i] >= 10){ n1[i] -= 10; n1[i + 1]++;//这里注意。。不能是n1[++i]++...++i改变了i值,WA了好久。。。。 } } bool isOutPut = false; for(int i = MAX_LEN; i >= 0; i--){ if(isOutPut){ printf("%d", n1[i]); }else if(n1[i]){ printf("%d", n1[i]); isOutPut = true; } } if(!isOutPut){ printf("0"); } //system("pause"); return 0; }
-