Python 罗马数字转整数
假设我们有罗马数字文字;我们需要将它们转换为整数。正如我们所知,罗马数字以一些不同的符号表示,如下所示 –
Numeral | Value |
---|---|
I | 1 |
V | 5 |
X | 10 |
L | 50 |
C | 100 |
D | 500 |
M | 1000 |
如果我们仔细观察罗马数字,可以发现它像是数字’II’,所以它是2,表示有两个’I’相加。对于XII,它是12,实际上是X + II = 10 + 2 = 12。罗马数字4不是IIII,而是IV。这有点复杂。
- I可以放在V(5)和X(10)之前,分别表示4和9。
-
X可以放在L(50)和C(100)之前,分别表示40和90。
-
C可以放在D(500)和M(1000)之前,分别表示400和900。
在这种情况下,我们将创建一个罗马数字转换成整数的程序,可以将数字从1转换为3999。
为了解决这个问题,我们将创建一些可能的数字和它们的值,并且还会考虑一些特殊值,如4、9、40、90、400和900。现在扫描给定的字符串,如果某个子字符串存在于表中,那么将其值添加到结果中,然后检查下一个,如果匹配,则将值与结果相加,最后形成数字。
让我们看一下实现代码,以便更好地理解。
示例
class Solution(object):
def romanToInt(self, s):
"""
:type s: str
:rtype: int
"""
roman = {'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}
i = 0
num = 0
while i < len(s):
if i+1<len(s) and s[i:i+2] in roman:
num+=roman[s[i:i+2]]
i+=2
else:
#print(i)
num+=roman[s[i]]
i+=1
return num
ob1 = Solution()
print(ob1.romanToInt("III"))
print(ob1.romanToInt("CDXLIII"))
输入
"III"
"CDXLIII"
输出
3
443