11月会员限时半价,下个月恢复原价188 开会员立即查看此资源以及本站全部资源,人工开通或售后问题加v:thumbxmw
详情点击这里查看
描述
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 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
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,加站长微信免费获取积分,会员只需38元,全站资源免费下载 点击查看详情
站 长 微 信: thumbxmw
声明:本站内容转载于网络,版权归原作者所有,仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任,若侵犯到你的版权利益,请联系我们,会尽快给予删除处理!