题目描述
高精度加法,相当于 a+b problem,不用考虑负数。
输入格式
分两行输入。a,b≤10500。
输出格式
输出只有一行,代表 a+b 的值。
输入输出样例
输入 #1
1 1
输出 #1
2
输入 #2
1001 9099
输出 #2
10100
说明/提示
20% 的测试数据,0≤a,b≤109;
40% 的测试数据,0≤a,b≤1018。
解
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int main()
{
char a1[10000], a2[10000];
int a[10000], b[10000], c[10000];//存储相加结果
int len_a, len_b, len_c=1, x, i;
memset(a, 0, sizeof(a));
memset(a, 0, sizeof(b));
memset(a, 0, sizeof(c));
cin >> a1 >> a2;//输入两个加数123 4567
len_a = strlen(a1); len_b = strlen(a2);//3 4
for (i = 0; i < len_a; i++)a[len_a - i] = a1[i] - '0';//321
for (i = 0; i < len_b; i++)b[len_b - i] = a2[i] - '0';//7654
x = 0;
while (len_c <= len_a || len_c <= len_b)//987 675
{
c[len_c] = a[len_c] + b[len_c] + x;//5 6 3
x = c[len_c] / 10;//1 1 1
c[len_c] %= 10;
len_c++;//5631
}
c[len_c] = x;
if (c[len_c] == 0)len_c--;
for (int i = len_c; i >= 1; i--)
cout << c[i];
return 0;
}