在Python中将整数转换为罗马数字的程序
假设我们有一个数字num。我们必须将其转换为相应的罗马数字。罗马数字包含以下符号和值 −
- “I” = 1
- “V” = 5
- “X” = 10
- “L” = 50
- “C” = 100
- “D” = 500
- “M” = 1000
这些符号通常按从大到小的顺序书写,并且从左到右的顺序可以通过计算所有符号的值总和来计算。但是有一些特殊情况,其中低价值的符号位于高价值的符号左侧,这表示从高价值中减去了低价值。
以下是此类情况的示例 −
- “I”在“V”之前,值为4.
- “I”在“X”之前,值为9.
- “X”在“L”之前,值为40.
- “X”在“C”之前,值为90.
- “C”在“D”之前,值为400.
- “C”在“M”之前,值为900.
在罗马数字中还有一些规则 −
- 任何符号都不会重复超过3次。
- 符号“V”,“L”和“D”不会重复。
因此,如果输入是n = 1520,则输出将为“MDXX”,因为“MDXX”表示1000 + 500 + 10 + 10 = 1520。
要解决此问题,我们将采取以下步骤 −
- res:= 空字符串
- table = 包含以此格式的配对(val,symbol)列表,其中val是值,symbol是相关符号[(1000,“M”),(900,“CM”),(500,“D”),(400,“CD”),(100,“C”),(90,“XC”),(50,“L”),(40,“XL”),(10,“X”),(9,“IX”),(5,“V”),(4,“IV”),(1,“I”)]
- 对于表中的每个对(cap,roman),进行以下操作 −
- d:= num / cap的地板数
- m:= num mod cap
- res:= res + roman * d
- num:= m
- 返回res
示例
让我们看下面的实现以获得更好的理解 −
def solve(num):
res = ""
table = [
(1000, "M"),
(900, "CM"),
(500, "D"),
(400, "CD"),
(100, "C"),
(90, "XC"),
(50, "L"),
(40, "XL"),
(10, "X"),
(9, "IX"),
(5, "V"),
(4, "IV"),
(1, "I"),
]
for cap, roman in table:
d, m = divmod(num, cap)
res += roman * d
num = m
return res
num = 1520
print(solve(num))
输入
1520
输出
MDXX