Python 中将整数转换为罗马数字的程序

pythonserver side programmingprogramming更新于 2026/1/20 5:00:17

假设我们有一个数字 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 := floor of 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

相关文章


有用资源