题目:
Given an integer, convert it to a roman numeral.Input is guaranteed to be within the range from 1 to 3999.
分析:罗马数字,转到阿拉伯数字是相当有规律的。比如9 -- IX, 90 -- XC, 99 -- XCIX
思路:map形式,将所有特殊的都存储起来,然后在直接通过key获取相应的值。
代码:
string intToRoman(int num) {
map <int, map<int, string>>map1;
map1[10][1] = "I";
map1[10][2] = "II";
map1[10][3] = "III";
map1[10][4] = "IV";
map1[10][5] = "V";
map1[10][6] = "VI";
map1[10][7] = "VII";
map1[10][8] = "VIII";
map1[10][9] = "IX";
map1[100][1] = "X";
map1[100][2] = "XX";
map1[100][3] = "XXX";
map1[100][4] = "XL";
map1[100][5] = "L";
map1[100][6] = "LX";
map1[100][7] = "LXX";
map1[100][8] = "LXXX";
map1[100][9] = "XC";
map1[1000][1] = "C";
map1[1000][2] = "CC";
map1[1000][3] = "CCC";
map1[1000][4] = "CD";
map1[1000][5] = "D";
map1[1000][6] = "DC";
map1[1000][7] = "DCC";
map1[1000][8] = "DCCC";
map1[1000][9] = "CM";
map1[10000][1] ="M";
map1[10000][2] = "MM";
map1[10000][3] = "MMM";
int a = 10;
int b;
string s = "";
while(num)
{
b = num%10;
if(b != 0)
{
s = map1[a][b] + s;
}
num = num/10;
a = a * 10;
}
return s;
}
更为简单的解法(网上抄的-_-):
- public String intToRoman(int number) {
- int[] values = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };
- String[] numerals = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" };
- StringBuilder result = new StringBuilder();
- for (int i = 0; i < values.length; i++) {
- while (number >= values[i]) {
- number -= values[i];
- result.append(numerals[i]);
- }
- }
- return result.toString();
- }