写程序求两个大整数(100位以上)的和。
Description
两个大整数的位数,小于3000 两个大整数
Input
两个大整数的和
Output
1
2
3
|
20 20
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
Sample Input
1
|
88888888888888888888
|
Sample Output
/*假设a的长度为n,b的长度为m a+b的长度有几种情况: 1,a>b:长度最多a+1 2,a<b:长度最多b+1 3,a=b:长多最多b+1 So,答案数组从(a,b)中最大的一个+1开始计算,即:t=max(a,b)+1*/ #include<iostream> #include<algorithm> #include<string.h> #include<stdio.h> using namespace std; int n, m; void fun(int *a, int *b, int *c)//长度a>b:n>m { n--; m--; int t = max(n, m) + 1; int i, j; int jinwei = 0;//判断是否进位 for (i = n, j = m; i >= 0 && j >= 0; i--, j--) { c[t--] = (a[i] + b[j] + jinwei) % 10; jinwei = (a[i] + b[j] + jinwei) / 10; } for (; i >= 0&&t >= 0; i--) { c[t--] = (a[i] + jinwei) % 10; jinwei = (a[i] + jinwei) / 10; } if (jinwei) { c[t] = 1; } else { c[t] = 0; } } int main() { int a[3005], b[3005], ans[10000]; while (cin >> n >> m) { for (int i = 0; i < n; i++) { cin >> a[i]; } for (int j = 0; j < m; j++) { cin >> b[j]; } if(n>=m) fun(a, b, ans); else { swap(n, m); fun(b, a, ans); } for (int i = 0; i < max(n,m) + 2; i++) { if (i == 0) { if (ans[i] == 0) continue; } cout << ans[i]; } cout << endl; } return 0; }