描述

罗马数字包含以下七种字符(字母大写):‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

  1. IVXLCDM

对应关系如下:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

  1. I=1, V=5 ,X=10, L=50, C=100, D=500, M=1000

比如3表示为III,也就是1+1+1=3‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
XII表示 10+1+1 = 12‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
MD表示1000+500 =1500‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
一般来说,大的数字出现在小的数字的左边,但也存在下列情况:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

IV=4,IX=9,XL=40,  XC=90,  CD=400,  CM=900

输入一个罗马数字数串,计算对应的10进制整数数值并输出。本题用例均为合法罗马数字表示(不含其他字符)

可以采用字典保存对应关系:

 dic = {'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,
        'M':1000,'IV':4,'IX':9,'XL':40,'XC':90,'CD':400,'CM':900}

输入一个罗马数字数串 s, 设序号为0的数为计算的初值,再从序号为1的数开始向后遍历,若当前位置的字符与前一个位置的字符合在一起在字典中存在的话,在加上这个数值的同时,减去前一个数单独的值。如输入MCMXCIV时,分别输出每种情况下的运算:

def convert(s):
    dic = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500,
           'M': 1000, 'IV': 4, 'IX': 9, 'XL': 40, 'XC': 90, 'CD': 400, 'CM': 900}
    result = dic[s[0]]                                             # s[0] 为输入的字符串的第一个字符,d[s[0]]为字典中键s[0]对应的值
    for i in range(1, len(s)):                                     # 从1到字符串的长度进行遍历
        if s[i - 1:i + 1] in dic:                                  # 当前位置的字符与前一个位置的字符合在一起在字典中存在
            result = result + dic[s[i - 1:i + 1]] - dic[s[i - 1]]  # 加上2个字符表示的数字后,要减去前面单独一个字符表示的数字
            print(s[i], result, dic[s[i - 1:i + 1]], -dic[s[i - 1]])
        else:
            result = result + dic[s[i]]                            # 如果当前字符与前一个字符无关时,直接加上这个字符表示的数字
            print(s[i],result, dic[s[i]])
    return result

输出为:

C 1100 100
M 1900 900 -100
X 1910 10
C 1990 90 -10
I 1991 1
V 1994 4 -1

完整参考代码为:

def convert(s):
    dic = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500,
           'M': 1000, 'IV': 4, 'IX': 9, 'XL': 40, 'XC': 90, 'CD': 400, 'CM': 900}
    result = dic[s[0]]                                             # s[0] 为输入的字符串的第一个字符,d[s[0]]为字典中键s[0]对应的值
    for i in range(1, len(s)):                                     # 从1到字符串的长度进行遍历
        if s[i - 1:i + 1] in dic:                                  # 当前位置的字符与前一个位置的字符合在一起在字典中存在
            result = result + dic[s[i - 1:i + 1]] - dic[s[i - 1]]  # 加上2个字符表示的数字后,要减去前面单独一个字符表示的数字
        else:
            result = result + dic[s[i]]                            # 如果当前字符与前一个字符无关时,直接加上这个字符表示的数字
    return result

if __name__ == '__main__':
    s=input()
    print(convert(s))

输入
MCMXCIV
输出
1994