Java 整数转罗马数字

17 Mar 2025 | 5 分钟阅读

这是一个经常在顶级 IT 公司(如 Google、Amazon、TCSAccenture 等)的面试中出现的问题。通过解决这个问题,面试官想考察面试者的逻辑能力、批判性思维和解决问题的能力。因此,在本节中,我们将讨论 如何在 Java 中将整数转换为罗马数字,采用不同的方法和逻辑。此外,我们还将为此创建 Java 程序。

Convert Integer to Roman Numerals in Java

罗马数字

罗马数字是数字的符号表示。它们通常用于钟表、乐理等。有 七个 字母用于表示罗马数字。下表表示罗马数字和相应的十进制值。

Character罗马数字
I1
V5
X10
L50
C100
D500
M1000

罗马数字具有以下特性

通常从左到右以从高到低的顺序书写,但某些特殊情况除外(左侧字符小于右侧字符)。例如,罗马数字 IV 等于 4。它不能写成 IIII。

在这种情况下,我们将左侧字符的值从右侧字符的值中减去。例如,IV 将是 5-1=4。同样,IX 将是 10-1=9。

考虑以下情况

  • 罗马数字 I 可以放在 V 或 X 之前,表示减一。例如,IV (5-1) = 4,9 是 IX (10-1) = 9。
  • 罗马数字 X 可以放在 L 或 C 之前,表示减十。例如,XL (50-10) = 40,XC (100-10) = 90。
  • 罗马数字 C 放在 D 或 M 之前,表示减一百。例如,CD (500-100) = 400,CM (1000-100) = 900。

方法

将整数转换为罗马数字的方法很简单。首先,创建两个数组,一个用于存储罗马数字的值,第二个用于存储相应的字母。创建 StringBuilder 类的实例。现在将整数与罗马数字进行比较,并执行以下操作

  • 如果输入数字 >= 最高的罗马数字,则将其添加到字符串构建器中,并从输入数字中减去其相应的值。
  • 如果输入数字 < 最高的罗马数字,则检查下一个最高的罗马数字。重复上述过程,直到输入数字变为 0。

StringBuilder 将是相应的罗马数字。

让我们通过一个例子来理解上述步骤。

示例

假设我们要将 36 转换为罗马数字。将整数与罗马值比较如下。

1000 > 36 = 是,检查下一个罗马数字。

900 > 36 = 是,检查下一个罗马数字。

500 > 36 = 是,检查下一个罗马数字。

400 > 36 = 是,检查下一个罗马数字。

100 > 36 = 是,检查下一个罗马数字。

90 > 36 = 是,检查下一个罗马数字。

50 > 36 = 是,检查下一个罗马数字。

40 > 36 = 是,检查下一个罗马数字。

10 < 36,将对应的字母“X”添加到结果中,结果 =X,N = 36-10=26

10 < 26,将对应的字母“X”添加到结果中,结果 =XX,N = 26-10=16

10 < 16,将对应的字母“X”添加到结果中,结果 =XXX,N = 16-10=6

10 > 6,检查下一个罗马数字,结果 =XXX

9 > 6,检查下一个罗马数字,结果 =XXX

5 < 6,将对应的字母“V”添加到结果中,结果 =XXXV,N = 6-5=1

5 > 1,检查下一个罗马数字,结果 =XXXV

4 > 1,检查下一个罗马数字,结果 =XXXV

1 == 1,将对应的字母“I”添加到结果中,结果 =XXXVI,N = 1-1=0

结果 = XXXVI

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

IntegerToRoman.java

输出

Convert Integer to Roman Numerals in Java

另一种打印罗马数字的方法是创建四个位值数组。例如,个位、十位、百位和千位。之后,计算其位值并转换为罗马数字。

IntegerToRoman.java

输出

Convert Integer to Roman Numerals in Java

注意:上述 Java 程序在 3999 之前运行良好。

在给定范围内打印罗马数字

DecimaltoRoman.java

输出

Convert Integer to Roman Numerals in Java

除了上述方法,还有多种将整数转换为罗马数字的方法,例如使用 TreeMap、使用 switch case 等。