题目在这:https://leetcode-cn.com/problems/roman-to-integer/

之前做过一个正数转罗马数,这题反过来了。

题目中有一个比较重要的信息需要注意:
罗马数字的左边字母如果小于右边字母,那就是右边字母代表的数字减去左边代表的数字。
比如 ‘IV’ I 代表 1 V代表5 显然左边小于右边 所以是 -1+5 。
知道这一点之后程序就比较容易写出来了。
步骤分解:
比如:MCMXCIV
1.M代表1000 大于C代表的100所以是 +1000.
2.C小于第二个M 所以是 -100 .
3.第二个M大于后面的X 所以是 +1000.
4.X小于后面的C 所以是 -10.
5.C大于后面的I 所以是 +100.
6.I小于后面的V 所以是 -1.
7.最后一位V 直接是 +5.

将上面7步得到的数全部相加 1000-100+1000-10+100-1+5=1994

所以我们只需要吧罗马数字的字母对应好整数数字放到字典里就行了.
上代码!

num = "MCMXCIV"
dic = {
'I': 1,
'V': 5,
'X': 10,
'L': 50,
'C': 100,
'D': 500,
'M': 1000,
}
num = list(num)
res = 0
for i in range(len(num)-1):
if dic[num[i]] < dic[num[i+1]]:
res = -dic[num[i]] + res
else:
res = res + dic[num[i]]
res = res + dic[num[-1]]
print(res)

这个程序要注意一个小点,就是最后一位不需要比较,在循环里控制好,最后的时候别忘了加上最后一位…