[题目]
Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
[中文翻译]
给定一个整数,将其转换为罗马数字。
输入保证在1到3999的范围内。
[解题思路]
一开始错了几次,然后发现罗马数字的规则还是挺复杂的。
原本是打算找一下随着数值增加,对应的罗马数字变化规律的,似乎不太靠谱。
好在输入保证在1到3999范围内,对于每一个进制位上,罗马数字的展开还是有规则的,所以照着规则写就好了。
规则见代码就行,这里就不详细叙述了。
[C++代码]
class Solution {
public:
string intToRoman(int num) {
string res;
switch (num / 1000) {
case 1:
res = "M";
break;
case 2:
res = "MM";
break;
case 3:
res = "MMM";
break;
default:
break;
}
num = num % 1000;
switch (num / 100) {
case 1:
res += "C";
break;
case 2:
res += "CC";
break;
case 3:
res += "CCC";
break;
case 4:
res += "CD";
break;
case 5:
res += "D";
break;
case 6:
res += "DC";
break;
case 7:
res += "DCC";
break;
case 8:
res += "DCCC";
break;
case 9:
res += "CM";
break;
default:
break;
}
num = num % 100;
switch (num / 10) {
case 1:
res += "X";
break;
case 2:
res += "XX";
break;
case 3:
res += "XXX";
break;
case 4:
res += "XL";
break;
case 5:
res += "L";
break;
case 6:
res += "LX";
break;
case 7:
res += "LXX";
break;
case 8:
res += "LXXX";
break;
case 9:
res += "XC";
break;
default:
break;
}
num = num % 10;
switch (num) {
case 1:
res += "I";
break;
case 2:
res += "II";
break;
case 3:
res += "III";
break;
case 4:
res += "IV";
break;
case 5:
res += "V";
break;
case 6:
res += "VI";
break;
case 7:
res += "VII";
break;
case 8:
res += "VIII";
break;
case 9:
res += "IX";
break;
default:
break;
}
return res;
}
};