12_整数转罗马数字
描述:
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
字符 数值
I 1
V 5
X 10
L 50
C 100
D 500
M 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。
给你一个整数,将其转为罗马数字。
示例:
输入: num = 1994
输出: “MCMXCIV”
解释: M = 1000, CM = 900, XC = 90, IV = 4.
class Solution:
def intToRoman(self, num: int) -> str:
s = ''
num_a = num
while(num_a > 0):
if(num_a // 1000 > 0 ):
s = s + 'M' * (num_a // 1000)
num_a = num_a % 1000
elif (num_a // 100 > 0):
if (num_a // 100 == 9):
s = s + 'CM'
elif(num_a // 100 == 4):
s = s + 'CD'
elif(num_a // 100 >= 5):
s = s + 'D' + 'C' * (num_a // 100 - 5)
else:
s = s + 'C' * (num_a // 100 )
num_a = num_a % 100
elif (num_a // 10 > 0):
if (num_a // 10 == 9):
s = s + 'XC'
elif(num_a // 10 == 4):
s = s + 'XL'
elif(num_a // 10 >= 5):
s = s + 'L' + 'X' * (num_a // 10 - 5)
else:
s = s + 'X' * (num_a // 10 )
num_a = num_a % 10
elif (num_a // 1 > 0):
if (num_a // 1 == 9):
s = s + 'IX'
elif(num_a // 1 == 4):
s = s + 'IV'
elif(num_a // 1 >= 5):
s = s + 'V' + 'I' * (num_a // 1 - 5)
else:
s = s + 'I' * (num_a // 1 )
num_a = num_a % 1
return s
13_罗马数字转整数
描述:
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
字符 数值
I 1
V 5
X 10
L 50
C 100
D 500
M 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。
给定一个罗马数字,将其转换成整数。
示例
输入: s = “MCMXCIV”
输出: 1994
解释: M = 1000, CM = 900, XC = 90, IV = 4.
代码
class Solution:
def romanToInt(self, s: str) -> int:
s_l = list(s)
n = len(s_l)
R = n - 1
num = 0
while (R >= 0):
if(s_l[R] == 'I'):
if (R < n - 1 and s_l[R + 1] in 'VX' ) :
num = num - 1
else:
num = num + 1
elif(s_l[R] == 'X'):
if (R < n - 1 and s_l[R + 1] in 'LC' ) :
num = num - 10
else:
num = num + 10
elif(s_l[R] == 'C'):
if (R < n - 1 and s_l[R + 1] in 'DM' ) :
num = num - 100
else:
num = num + 100
elif (s_l[R] == 'V'):
num = num + 5
elif (s_l[R] == 'L'):
num = num + 50
elif (s_l[R] == 'D'):
num = num + 500
elif (s_l[R] == 'M'):
num = num + 1000
R = R - 1
return num