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

LeetCode逆波兰表达式求值题指定测试用例输出错误排查

错误原因排查
  • 第一个错误:数字字符串转整数的逻辑错误
    你当前的转换代码是ans += (ans * 10)+(numx[j]-48);,这里误用了+=运算符,应该用=直接赋值。举个例子,转换字符串"10"的时候:
    1. 第一位字符'1':ans*10 + (1-48)结果是1,你用+=后ans等于0+1=1,暂时没问题
    2. 第二位字符'0':ans*10 + 0结果是10,你用+=后ans等于1+10=11,和正确值10差了1,这就是你最后结果多1输出23的直接原因
      另外你完全没有处理负数的情况,测试用例中的-11会被你错误转换,因为你直接把负号'-'也当成数字位计算('-'的ASCII码是45,45-48=-3,会导致转换结果完全错误)
  • 第二个错误:除法运算逻辑冗余(可选优化)
    C++11及以后标准中,两个int类型的除法默认就是向零取整,和trunc的效果完全一致,你这里先做num1/num2得到int结果,再调用trunc是多余操作,不过这部分不是你本次报错的原因。
修正后核心代码
else
{ 
    int j = 0;
    int ans = 0;
    int sign = 1;
    string numx = A[i];
    // 处理负号
    if(numx[0] == '-'){
        sign = -1;
        j = 1;
    }
    while(j<numx.length())
    {
        // 把+=修改为=
        ans = ans * 10 + (numx[j]-'0');
        j++;
    }
    s.push(ans * sign);
}

除法部分可以简化为s.push(num1/num2);。

内容的提问来源于stack exchange,提问作者At-U

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 09:06:02