12. 整數(shù)轉(zhuǎn)羅馬數(shù)字
羅馬數(shù)字包含以下七種字符: I驻子, V灿意, X, L崇呵,C脾歧,D 和 M。
字符 數(shù)值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
例如演熟, 羅馬數(shù)字 2 寫做 II 鞭执,即為兩個并列的 1。12 寫做 XII 芒粹,即為 X + II 兄纺。 27 寫做 XXVII, 即為 XX + V + II。
通常情況下化漆,羅馬數(shù)字中小的數(shù)字在大的數(shù)字的右邊估脆。但也存在特例,例如 4 不寫做 IIII座云,而是 IV疙赠。數(shù)字 1 在數(shù)字 5 的左邊,所表示的數(shù)等于大數(shù) 5 減小數(shù) 1 得到的數(shù)值 4 朦拖。同樣地圃阳,數(shù)字 9 表示為 IX。這個特殊的規(guī)則只適用于以下六種情況:
I 可以放在 V (5) 和 X (10) 的左邊璧帝,來表示 4 和 9捍岳。
X 可以放在 L (50) 和 C (100) 的左邊,來表示 40 和 90睬隶。
C 可以放在 D (500) 和 M (1000) 的左邊锣夹,來表示 400 和 900。
給定一個整數(shù)苏潜,將其轉(zhuǎn)為羅馬數(shù)字银萍。輸入確保在 1 到 3999 的范圍內(nèi)。
解題思路
- 這是一道簡單的模擬題恤左,由于范圍是在[1,3999]贴唇,只需要取出對應(yīng)的千位贰锁、百位、十位滤蝠、個位豌熄,分別表示好對應(yīng)的符號即可。
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