罗马数字到整数

问题描述 投票:0回答:1
def romanToInt(s):
        symbol= ['I','V','X','L','C','D','M']
        value= [1,5,10,50,100,500,1000]
        dic= {k:v for k,v in zip(symbol, value)}
        sums=0
        string= [i for i in range(len(s))]
        for i in string:
            if s[i] in ['I','X','C']:
                left_index= list(dic.keys()).index(s[i])
                next_symbol= list(dic.keys())[left_index + 1]
                next2_symbol= list(dic.keys())[left_index + 2]

                if i < len(s) and (s[i]== next_symbol or s[i]== next2_symbol):
                    sums+= dic[s[i+1]] -dic[s[i]]
                    string.remove(i)
                    string.remove(i+1)
                elif i < len(s) and (s[i]!= next_symbol or s[i]!= next2_symbol):
                    sums+= dic[s[i]]
                elif i== len(s):
                    sums+= dic[s[i]]
            else:
                sums+= dic[s[i]]

        return sums

当我将一些罗马数字放在一起(例如 IV、IX、XL 等)时,我的代码出现一些问题,例如“MCMXCIV”,输出是 2216 而不是 1994。需要一些帮助

python
1个回答
1
投票
def romanToInt(s):
    symbol = ['I', 'V', 'X', 'L', 'C', 'D', 'M']
    value = [1, 5, 10, 50, 100, 500, 1000]
    dic = {k: v for k, v in zip(symbol, value)}
    sums = 0
    i = 0
    while i < len(s):
        if i < len(s) - 1 and dic[s[i]] < dic[s[i + 1]]:
            sums += dic[s[i + 1]] - dic[s[i]]
            i += 2
        else:
            sums += dic[s[i]]
            i += 1
    return sums

使用 while 循环的正确版本

© www.soinside.com 2019 - 2024. All rights reserved.