本帖最后由 圣凰院 于 2018-5-31 21:56 编辑
(萌瑟抖)
罗马数字包含以下七种字符:I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:
- I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
- X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。
- C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。 示例 1: 输入: "III"输出: 3
示例 2:
输入: "IV"
输出: 4
示例 3:
输入: "IX"
输出: 9
示例 4:
输入: "LVIII"
输出: 58
解释: C = 100, L = 50, XXX = 30, III = 3.
示例 5:
输入: "MCMXCIV"
输出: 1994
解释: M = 1000, CM = 900, XC = 90, IV = 4
"""
规律:例,"MCMXCIV",值为1994,根据单个字符所蕴含的值,两两比较,赋予单个值正负
M = 1000, C=100 , M = 1000, X = 10, C = 100 ,I= 1,V=5
定义一个和为sum = 0
从左往右开始比较
1.M > C ,第一位取正, M = +1000 , sum = 0 + (+1000) = 1000
2.C < M , 第二位取夫, C = -100 , sum = 1000 + (-100) = 900
3.M > X , 第三位取正, M = +1000 , sum = 900 + (+1000) = 1900
4.X < C , 第四位取负, X = -10 , sum = 1900 + (-10) = 1890
5.C > I , 第五位取负, C = +100 , sum = 1890 + (+100) = 1990
6.I < V , 第六位取负, I = -1 , sum = 1990 + (-1) = 1989
7. V 末尾默认相加, V = +5 , sum = 1989 + (+5) = 1994
观察上面解题思路
1.需用到判断大小,取其正负,应用if语句
2.字符串循环遍历,需用for循环,取单个字符两两比较,取其正负,再加上和sum
3.循环范围:0,len(s)-1 len(s)函数可统计出str元素个数,减一是因为所有从0 开始
4.XII 等例,当前位等于后一位时,取其正
5.最后一位默认取正
"""
def romanToInt(s):
dic = {'M': 1000, 'D': 500, 'C': 100, 'L': 50, 'X': 10, 'V': 5, 'I': 1}
sum = 0
for i in range(0, len(s) - 1):
if dic[s] < dic[s[i + 1]]:
sum -= dic[s]
else:
sum += dic[s]
sum += dic[s[-1]]
return sum
result = romanToInt("MCMXCIV")
print(result)
|