1. 程式人生 > >計蒜客:A+B問題

計蒜客: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;
}