有趣的罗马数字
题目如下
输入一个十进制数,转换为相应的罗马数字。
例如:I(1)、V(5)、X(10)、L(50)、C(100)、D(500)、M(1000)
IV(4)、IX(9)、XL(40)、XC(90)
请转换0-3999之间的任意数字。
示例:
4 -> IV
6 -> VI
9 -> IX
58 -> LVIII
1994 -> MCMXCIV
3999 -> MMMCMXCIX
对于这个有趣的题目,我刚开始的第一反应就是输入一个数字,然后进行if-else判断,再0-10怎么转,11-100怎么转,特殊情况如4,9之类的怎么转等等这样的方法。殊不知,这样是把这个题想的太复杂,每一次判断都要进行字符串的拼接,不是特别麻烦吗?
正确思路:如3999 = 3 * 1000 + 9 * 100 + 9 * 10 + 9。提前定义好1000,100,10等整数的数组,把给定的十进制数进行拆分,在数组中按照索引进行筛选即可。
代码如下:
public class RomanNumber {
private static String covertRomanNum(int num) {
String[] M = {"", "M", "MM", "MMM"};
String[] C = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
String[] X = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
String[] I = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
return M[num / 1000] + C[(num % 1000) / 100] + X[(num % 100) / 10] + I[(num % 10)];
}
public static void main(String[] args) {
System.out.println(covertRomanNum(4));
System.out.println(covertRomanNum(6));
System.out.println(covertRomanNum(9));
System.out.println(covertRomanNum(58));
System.out.println(covertRomanNum(1994));
System.out.println(covertRomanNum(3999));
}
}