You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

仅用iostream与string库的C++大数相加代码结果时对时错排查

大整数求和代码问题排查

问题1:缺少必要头文件引用

代码中调用了std::reverse函数,但仅引入了<iostream>和<string>库,部分编译器不会通过string头文件间接引入算法库,会导致编译失败或未定义行为,是不同环境运行结果不一致的常见诱因。
修复方案:在头文件声明区域添加:

#include <algorithm>

问题2:输入读取方式兼容性不足

你使用getline按行读取输入,仅支持「两个大整数各占一行」的输入格式。如果测试用例中两个大整数为同一行空格分隔的格式,第一次getline会把两个数全部读入num1,num2将为空字符串,最终计算结果完全错误,这是部分测试用例失败的核心原因。
修复方案:将两次getline调用替换为cin输入,默认以任意空白符(空格、换行、制表符等)作为分隔符,兼容所有常见输入格式:

cin >> num1 >> num2;

问题3:边界场景处理错误

当输入两个值为0的大整数时,计算得到的sum初始为低位在前的"0",原有去前导零的逻辑会把唯一的0也删除,最终输出空字符串,不符合预期。
修复方案:修改去前导零的逻辑,仅在字符串长度大于1时删除末尾的前导零:

while(sum.length() > 1 && sum.back() == '0'){
    sum.pop_back();
}

修复后完整代码

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

int main (){
    string num1 , num2 ,sum;
    cin >> num1 >> num2;
    if (num2.length() > num1.length())
    {
        num2.swap(num1);
    }
    reverse(num1.begin(), num1.end());
    reverse(num2.begin(), num2.end());
    while(num2.length() < num1.length())
        num2.push_back('0');
    size_t lnth = num1.length();
    unsigned tmp , holder=0;
    for (size_t i = 0;i < lnth ; i++){
        tmp = (num1[i] - '0') + (num2[i] - '0') + holder;
        sum.push_back(tmp % 10 + '0');
        holder = tmp / 10;
    }
    if(holder > 0){
        sum.push_back('0' + holder);
    }
    while(sum.length() > 1 && sum.back() == '0'){
        sum.pop_back();
    }
    reverse(sum.begin(), sum.end());
    cout << sum;
    return 0;
}

内容的提问来源于stack exchange,提问作者Hamid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 17:15:04