swustoj大整数加法(0434)

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


 
  

你可能感兴趣的:(swustoj)