模拟大数加法

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


 

你可能感兴趣的:(模拟大数加法)