計蒜客:A+B問題
阿新 • • 發佈:2019-01-14
問題:
計算兩個非負整數
的和。
不過這一次有些特殊,
可能會很大。
輸入格式:
第一行輸入一個非負整數
。
第二行輸入一個非負整數
。
的長度不大於
。
輸出格式
輸出
的值。
不要有多餘的前導零。
樣例輸入:
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;
}