Contest100000593 - 《算法笔记》5.6小节——数学问题->大整数运算
题目描述
实现一个加法器,使其能够输出a+b的值。
输入
输入包括两个数a和b,其中a和b的位数不超过1000位。
输出
可能有多组测试数据,对于每组数据,
输出a+b的值。
样例输入
6 8
2000000000 30000000000000000000
样例输出
14
30000000002000000000
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
struct bign {
int d[1000];
int len;
bign() {
memset(d, 0, sizeof(d));
len = 0;
}
};
bign change(char str[]) {
bign a;
a.len = strlen(str);
for (int i = 0;i < a.len;i++) {
a.d[i] = str[a.len - i - 1] - '0';
}
return a;
}
bign add(bign a, bign b) {
bign c;
int carry = 0;
for (int i = 0;i < a.len || i < b.len;i++) {
int temp = a.d[i] + b.d[i] + carry;
c.d[c.len++] = temp % 10;
carry = temp / 10;
}
if (carry != 0) {
c.d[c.len++] = carry;
}
return c;
}
void print(bign a) {
for (int i = a.len - 1;i >= 0;i--) {
printf("%d", a.d[i]);
}
}
int main() {
char str1[1000], str2[1000];
while (cin>>str1>>str2) {
bign a = change(str1);
bign b = change(str2);
print(add(a, b));
}
return 0;
}