题目描述
Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
把数字转换为罗马数字,数字范围在 1~3999 之间。
解题思路
罗马数字表:
罗马字母 | I | V | X | L | C | D | M |
---|---|---|---|---|---|---|---|
阿拉伯数字 | 1 | 5 | 10 | 50 | 100 | 500 | 1000 |
对应数字:
类别 | 罗马数字 |
---|---|
0-3 | I-III |
4 | IV |
5-8 | V-VIII |
9 | IX |
先低位后高位判断当前类别,然后存储在 StringBuilder 内,存储时按类别反向存储。最后把 StringBuilder 翻转。
代码
class Solution {
public String intToRoman(int num) {
StringBuilder sb = new StringBuilder();
char[] roman = {'I', 'V', 'X', 'L', 'C', 'D', 'M'};
for (int i = 0; num > 0; i++) {
int tmp = num % (int)Math.pow(10, 1);
num /= Math.pow(10, 1);
if (tmp < 4) {
for (int j = 0; j < tmp; j++)
sb.append(roman[2*i]);
} else if (tmp == 4) {
sb.append(roman[2*i+1]);
sb.append(roman[2*i]);
} else if (tmp < 9) {
for (int j = 0; j < tmp-5; j++) {
sb.append(roman[2*i]);
}
sb.append(roman[2*i+1]);
} else {
sb.append(roman[2*(i+1)]);
sb.append(roman[2*i]);
}
}
return sb.reverse().toString();
}
}
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于