[ACM]模拟大数加法

Input

多组输入数据。

每组输入有两行,每行为一个非负的整数(可能包含前导零)。

所有整数位数不超过1234。

Output

对每组输入数据,输出一个整数a+b的和。请不要输出前导零。

Sample Input

1
1
100000000000000
100000000000000

Sample Output

2
200000000000000
<pre name="code" class="cpp">#include<iostream>
#include<string>

using namespace std;

void calc(string& LONG,string SHORT)//计算低位相加
{
	int cha = LONG.length() - SHORT.length();
	string n = '0' + LONG;
	int jinwei = 0;
	for (unsigned int i = SHORT.length()-1; i >0; i--)
	{
		n[cha + i+1] = char(n[cha + i+1] + SHORT[i] - '0' + jinwei);
		if (n[cha+i+1]>'9')//进位
		{
			n[cha + i+1] = char(n[cha + i+1] - 10);
			jinwei = 1;
		}
		else jinwei = 0;
	}
	n[cha + 1] = char(n[cha + 1] + SHORT[0] - '0' + jinwei);
	if (n[cha + 1]>'9')//进位
	{
		n[cha  + 1] = char(n[cha + 1] - 10);
		jinwei = 1;
	}
	else jinwei = 0;
	if (jinwei == 1) n[cha] ='1';//保证最后一位相加的进位正确
	LONG = n;
	return;
}

void print(string n)//输出函数
{
	bool flag=0;
	for (unsigned int  i = 0; i < n.length(); i++)
	{
		if (!flag)
		{
			if (n[i] !='0')//删去前导零
			{
				cout << n[i];
				flag = 1;
			}
		}
		else cout << n[i];
	}
	if (!flag) cout << "0";//保证0+0的可能
	cout << endl;
}
int main()
{
	string a, b;
	while (cin >> a >> b)
	{
		if (a.length() >= b.length())//a长度大于b
		{
			calc(a, b);
			print(a);
		}
		else//b长度大于a
		{
			calc(b, a);
			print(b);
		}
	}
	return 0;
}



                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值