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。
给定一个整数,将其转为罗马数字。输入确保在 1 到 3999 的范围内。
解题思路
- 这是一道简单的模拟题,由于范围是在[1,3999],只需要取出对应的千位、百位、十位、个位,分别表示好对应的符号即可。
class Solution:
def intToRoman(self, num: int) -> str:
dic = {'1':'I','4':'IV','5':'V','9':'IX','10':'X','40':'XL','50':'L','90':'XC','100':'C','400':'CD','500':'D','900':'CM','1000':'M'}
ge = num%10 #个位
shi = (num//10)%10 #十位
bai = (num//100)%10 #百位
qian = num//1000 #千位
Q = ''
B = ''
S = ''
G = ''
if qian:
for _ in range(qian):
Q += dic['1000']
if bai:
if bai == 9:
B += dic['900']
elif bai == 4:
B += dic['400']
elif bai >= 5:
B += dic['500']
bai -=5
for _ in range(bai):
B += dic['100']
else:
for _ in range(bai):
B += dic['100']
if shi:
if shi == 9:
S += dic['90']
elif shi == 4:
S += dic['40']
elif shi >= 5:
S += dic['50']
shi -=5
for _ in range(shi):
S += dic['10']
else:
for _ in range(shi):
S += dic['10']
if ge:
if ge == 9:
G += dic['9']
elif ge == 4:
G += dic['4']
elif ge >= 5:
G += dic['5']
ge -=5
for _ in range(ge):
G += dic['1']
else:
for _ in range(ge):
G += dic['1']
return Q+B+S+G