Java如何将数字转换为罗马数字?
您想将数字转换为罗马数字表示形式,反之亦然。此处的解决方案是将问题解决为一元问题,其中罗马数字表示为单个元素,即“I”字符。我们首先将数字表示为“I”字符的重复序列。然后根据罗马数字中的下一个较大符号替换字符。
要从罗马数字转换为数字,我们需要逆转这一过程。在该过程结束时,我们将获得一个重复的“I”字符序列。此过程返回的最终字符串的长度是罗马数字转换为数字的结果。
在下面的代码段中,我们创建两个方法。toRoman(intnumber)用于转换数罗马数字,并且方法toNumber(Stringroman)用于从罗马数字转换为数字的方法。这两种方法都利用String.replace()方法来计算转换结果。
让我们看看实际的代码。
package org.nhooo.example.lang;
public class RomanNumber {
public static void main(String[] args) {
for (int n = 1; n <= 4999; n++) {
String roman = RomanNumber.toRoman(n);
int number = RomanNumber.toNumber(roman);
System.out.println(number + " = " + roman);
}
}
private static String toRoman(int number) {
return String.valueOf(new char[number]).replace('\0', 'I')
.replace("IIIII", "V")
.replace("IIII", "IV")
.replace("VV", "X")
.replace("VIV", "IX")
.replace("XXXXX", "L")
.replace("XXXX", "XL")
.replace("LL", "C")
.replace("LXL", "XC")
.replace("CCCCC", "D")
.replace("CCCC", "CD")
.replace("DD", "M")
.replace("DCD", "CM");
}
private static Integer toNumber(String roman) {
return roman.replace("CM", "DCD")
.replace("M", "DD")
.replace("CD", "CCCC")
.replace("D", "CCCCC")
.replace("XC", "LXL")
.replace("C", "LL")
.replace("XL", "XXXX")
.replace("L", "XXXXX")
.replace("IX", "VIV")
.replace("X", "VV")
.replace("IV", "IIII")
.replace("V", "IIIII").length();
}
}下面列出了10个转换的随机结果:
18 = XVIII 208 = CCVIII 843 = DCCCXLIII 1995 = MCMXCV 2000 = MM 2017 = MMXVII 2562 = MMDLXII 3276 = MMMCCLXXVI 4067 = MMMMLXVII 4994 = MMMMCMXCIV