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

罗马数字转整数代码问题求助:输入MCMXCIV输出异常

罗马数字转整数函数问题修复

原代码的核心错误

  • 判断组合数字的逻辑完全写反:你原本想检查「下一个字符是不是当前字符的后一位/后两位符号」,但代码里写成了判断s[i]等于这些符号,这直接导致IV、XL这类组合完全不被识别
  • 循环中修改string列表会打乱遍历顺序:迭代过程中移除元素,会跳过后续的索引,导致计算重复或遗漏
  • 越界判断错误:i < len(s)应该是i < len(s)-1,不然最后一个字符访问s[i+1]会直接报错
  • 索引查找效率低:反复调用list(dic.keys()).index()没必要,字典本身就是键值映射,直接用键取 value 就行

修正后的代码

def romanToInt(s):
    roman_dict = {'I':1, 'V':5, 'X':10, 'L':50, 'C':100, 'D':500, 'M':1000}
    total = 0
    n = len(s)
    for i in range(n):
        # 如果当前字符不是最后一个,且当前值小于下一个值,用减法
        if i < n - 1 and roman_dict[s[i]] < roman_dict[s[i+1]]:
            total -= roman_dict[s[i]]
        else:
            total += roman_dict[s[i]]
    return total

逻辑说明

罗马数字的核心规则就是:如果当前字符代表的数值小于下一个字符的数值,就做减法;否则做加法。比如:

  • IV:1 < 5,所以 total = -1 +5 =4
  • MCMXCIV:拆分成 M(1000) + CM(900) + XC(90) + IV(4),计算过程就是1000 -100 +1000 -10 +100 -1 +5 =1994

测试输入MCMXCIV,这个函数会返回正确的1994。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 06:02:53