141 lines
2.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

### 原本代码
``` cpp
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
string re(string x){
reverse(x.begin(),x.end());
return x;
}
int sum_(int a,int b){
return (a+b)%10;
}
int plus_(int a,int b){
return ((a+b)/10>0) ? 1:0;
}
string main_(string a,string b){
string ans ="";
string n=a;
a=(a.size()<b.size()) ? b:a; b=(a.size()<b.size()) ? n:b;
a=re(a);b=re(b);
int m = a.size();
int plus = 0;
for(int i=0;i<m;i++){
int sum = 0;
if(i>b.size()){
sum = sum_(a[i]-'0',0);
ans+=char(sum+'0'+plus);
plus=plus_(a[i]-'0',0);
}
else{
sum = sum_(a[i]-'0',b[i]-'0');
ans+=char(sum+'0'+plus);
plus=plus_(a[i]-'0',b[i]-'0');
}
}
ans=re(ans);
return ans;
}
signed main(){
string a,b;
cin>>a>>b;
cout<<main_(a,b);
return 0;
}
```
### 修正代码
``` cpp
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
// 字符串反转函数
string re(string x){
reverse(x.begin(), x.end());
return x;
}
// 求个位
int sum_(int a,int b){
return (a + b) % 10;
}
// 判断是否进位
int plus_(int a,int b){
return ((a + b) / 10 > 0) ? 1 : 0;
}
// 高精度加法主函数
string main_(string a,string b){
string ans = "";
string n = a;
// 保证a为较长的字符串
a = (a.size() < b.size()) ? b : a;
b = (a.size() < b.size()) ? n : b;
a = re(a); b = re(b); // 反转便于从低位加起
int m = a.size();
int plus = 0;
for(int i = 0; i < m; i++){
int sum = 0;
// 错误判断i > b.size() 实际应该是 i >= b.size()
// 原错误代码:
// if(i > b.size()){
// 修正代码:
if(i >= b.size()){ // 修正:防止访问越界
// 原错误sum_(a[i]-'0', 0) + 直接加 plus 到字符上
// sum = sum_(a[i] - '0', 0);
// ans += char(sum + '0' + plus); // 错误:把 plus 加在字符上
// plus = plus_(a[i] - '0', 0);
// 修正:将 plus 加入总和,再统一处理进位
sum = (a[i] - '0') + plus;
ans += char((sum % 10) + '0');
plus = sum / 10;
}
else{
// 原错误同上:进位加在字符编码上,逻辑错
// sum = sum_(a[i] - '0', b[i] - '0');
// ans += char(sum + '0' + plus);
// plus = plus_(a[i] - '0', b[i] - '0');
// 修正如下
sum = (a[i] - '0') + (b[i] - '0') + plus;
ans += char((sum % 10) + '0');
plus = sum / 10;
}
}
// 处理最高位进位
if(plus) ans += char(plus + '0');
ans = re(ans); // 反转回来得到最终结果
return ans;
}
signed main(){
string a, b;
cin >> a >> b;
cout << main_(a, b);
return 0;
}
```