描述

罗马数字包含以下七种字符(字母大写):

I,V,X,L,C,D,M

对应关系如下:

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的数为计算的初值罗马数字3罗马数字3,再从序号为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 100M 1900 900 -100X 1910 10C 1990 90 -10I 1991 1V 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

限 时 特 惠: 本站每日持续更新海量各大内部创业教程,加站长微信免费获取积分,会员只需38元,全站资源免费下载 点击查看详情
站 长 微 信: thumbxmw