写程序求两个大整数(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;
}