解题代码
#include<iostream>
#include<string>
using namespace std;
int main() {
string q, a, b, ans;
int flag = 0, carry = 0;
cin >> q >> a >> b;
ans = q;
string a1(q.length() - a.length(), '0');
string b1(q.length() - b.length(), '0');
a = a1 + a;
b = b1 + b;
for (int i = q.length() - 1; i >= 0; i--) {
int t = q[i] == '0' ? 10 : (q[i] - '0');
ans[i] = (carry + a[i] - '0' + b[i] - '0') % t + '0';
carry = (carry + a[i] - '0' + b[i] - '0') / t;
}
if (carry) ans = '1' + ans;
for (int i = 0; i < ans.size(); i++) {
if (flag || ans[i] != '0') {
flag = 1;
cout << ans[i];
}
}
if (!flag) cout << 0;
return 0;
}
测试结果
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/a01ae8e928ef7bb9a5922c64bb35a34f.png)
问题整理
1.在最后输出的个数上出了问题,原以为还是和进制数组相同长度,但carry进制存在的缘故,有可能导致多出一位,故还是要以ans.size()为输出标准。