### 原本代码 ``` cpp #include #include #include 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()){ 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< #include #include 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; } ```