您想将数字转换为罗马数字表示形式,反之亦然。此处的解决方案是将问题解决为一元问题,其中罗马数字表示为单个元素,即“ I”字符。我们首先将数字表示为“ I”字符的重复序列。然后根据罗马数字中的下一个较大符号替换字符。
要从罗马数字转换为数字,我们需要逆转这一过程。在该过程结束时,我们将获得一个重复的“ I”字符序列。此过程返回的最终字符串的长度是罗马数字转换为数字的结果。
在下面的代码段中,我们创建两个方法。toRoman(int number)用于转换数罗马数字,并且方法toNumber(String roman)用于从罗马数字转换为数字的方法。这两种方法都利用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