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

LeetCode罗马数字转整数题使用if/else if方法结果错误原因求解

罗马数字转整数代码错误原因分析

你的代码存在以下几处核心错误,直接导致运行结果错误:

  • 条件判断误用后置自增运算符i++,特殊规则完全无法命中
    你在双字符匹配逻辑中写的str[i]=='I' and str[i++]=='V'逻辑存在根本错误:后置i++会先返回i的当前值参与比较,再将i自增1。这意味着第二个判断的字符仍是当前str[i],而非你预期的下一位字符str[i+1],同时i会被意外提前+1,导致后续字符访问全部错位,所有特殊规则的条件永远不会触发。
  • substr方法调用无效,无法跳过已处理字符
    C++中std::string的substr是只读接口,只会返回新生成的子串,不会修改原字符串本身。你写的str.substr(i+2)没有任何实际作用,原输入字符串不会变化,循环仍会按原有顺序遍历所有字符,不会跳过已经处理的双字符组合。
  • 缺少边界判断,存在数组越界风险
    当循环变量i走到字符串最后一个位置时,访问下一位字符会超出字符串的合法索引范围,触发未定义行为,程序运行结果不可预期。
  • 命中特殊规则后没有正确调整遍历步长
    就算前面的问题修复,命中双字符的特殊规则后,你需要手动将i额外+1,否则下一轮循环会重复处理双字符组合的第二个字符,导致数值累加错误。

修正后参考代码

int romanToDecimal(string &str) {
    int num = 0; 
    int n = str.size();
    for(int i = 0; i < n; i++){
        // 优先判断双字符特殊规则,先做边界判断避免越界
        if(i < n-1 && str[i] == 'I' && str[i+1] == 'V'){
            num += 4; 
            i++; // 额外+1,跳过下一个已处理的字符
        }
        else if(i < n-1 && str[i] == 'I' && str[i+1] == 'X'){
            num += 9;
            i++;
        }
        else if(i < n-1 && str[i] == 'X' && str[i+1] == 'L'){
            num += 40;
            i++;
        }
        else if(i < n-1 && str[i] == 'X' && str[i+1] == 'C'){
            num += 90;
            i++;
        }
        else if(i < n-1 && str[i] == 'C' && str[i+1] == 'D'){
            num += 400;
            i++;
        }
        else if(i < n-1 && str[i] == 'C' && str[i+1] == 'M'){
            num += 900;
            i++;
        }
        else if(str[i] == 'I'){
            num += 1;
        }
        else if(str[i] == 'V'){
            num += 5;
        }
        else if(str[i] == 'X'){
            num += 10;
        }
        else if(str[i] == 'L'){
            num += 50;
        }
        else if(str[i] == 'C'){
            num += 100;
        }
        else if(str[i] == 'D'){
            num += 500;
        }
        else if(str[i] == 'M'){
            num += 1000;
        }
    }
    return num;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:18:02