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<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;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值