问题:
计算两个非负整数
的和。
不过这一次有些特殊,
可能会很大。
输入格式:
第一行输入一个非负整数
。
第二行输入一个非负整数
。
的长度不大于
。
输出格式
输出
的值。
不要有多余的前导零。
样例输入:
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;
}