题目描述
Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
分析
罗马数字的计数方法
基本字符 | I | V | X | L | C | D | M |
---|---|---|---|---|---|---|---|
阿拉伯数字表示 | 1 | 5 | 10 | 50 | 100 | 500 | 1000 |
- 相同的数字连写,所表示的数等于这些数字相加得到的数,如:Ⅲ = 3;
- 小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数, 如:Ⅷ = 8;Ⅻ = 12;
- 小的数字,(限于Ⅰ、X 和C)在大的数字的左边,所表示的数等于大数减小数得到的数,如:Ⅳ= 4;Ⅸ= 9;
- 正常使用时,连写的数字重复不得超过三次。(表盘上的四点钟“IIII”例外);
- 在一个数的上面画一条横线,表示这个数扩大1000倍。
代码
public static String intToRoman(int num) {
final int[] values = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5,
4, 1 };
final String[] symbol = { "M", "CM", "D", "CD", "C", "XC", "L", "XL",
"X", "IX", "V", "IV", "I" };
StringBuilder result = new StringBuilder();
for (int i = 0; num>0; i++) {
int count = num / values[i];
num %= values[i];
for (; count > 0; count--) {
result.append(symbol[i]);
}
}
return new String(result);
}