计蒜客:A+B问题

问题:

计算两个非负整数 A , B A,B 的和。
不过这一次有些特殊, A , B A,B 可能会很大。

输入格式:
第一行输入一个非负整数 A A
第二行输入一个非负整数 B B
A , B A,B 的长度不大于 500 500

输出格式
输出 A + B A+B 的值。
不要有多余的前导零。

样例输入:

123
1234

样例输出:

1357

题解:

思路:转置计算,结果再转置回来
reverse函数中的begin和end迭代器

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main(void) 
{
	string A, B;
	string ans;
	cout << "请输入两数:";
	cin >> A >> B;
	reverse(A.begin(), A.end());
	reverse(B.begin(), B.end());
	int jw = 0; // 进位
	int len = min(A.length(), B.length());
	for (int i = 0; i < len; i++) 
	{
		ans += (A[i] - '0' + B[i] - '0' + jw) % 10 + '0';
		if (A[i] - '0' + B[i] - '0' + jw >= 10)
			jw = 1;
		else
			jw = 0;
	}
	if (len < A.length()) 
	{
		for (int i = len; i < A.length(); i++)
		{
			ans += (A[i] - '0' + jw) % 10 + '0';
			if (A[i] - '0' + jw >= 10)
				jw = 1;
			else
				jw = 0;
		}
	}
	else if (len < B.length()) 
	{
		for (int i = len; i < B.length(); i++) 
		{
			ans += (B[i] - '0' + jw) % 10 + '0';
			if (B[i] - '0' + jw >= 10)
				jw = 1;
			else
				jw = 0;
		}
	}
	reverse(ans.begin(), ans.end());
	cout << "相加后为:" << ans;
	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41918107/article/details/86375858