Problem:
Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
分析:
题目的要点在于罗马数字规则,见百度百科中罗马数字词条。
剩下的就是写出与规则对应的逻辑。
AC Code(C++):
class Solution {
public:
//3999 / 3999 test cases passed.
//Runtime: 58 ms
string intToRoman(int num) {
if (num > 3999) {
return "";
}
string BitNum[10] = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
string TenNum[10] = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
string HunNum[10] = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
string ThuNum[4] = {"", "M", "MM", "MMM"};
string result;
int divNum = 1000;
while (divNum) {
int index = num / divNum;
switch (divNum) {
case 1000:
result += ThuNum[index];
break;
case 100:
result += HunNum[index];
break;
case 10:
result += TenNum[index];
break;
case 1:
result += BitNum[index];
break;
default:
break;
}
if (divNum == 1) {
break;
}
else{
num %= divNum;
divNum /= 10;
}
}
return result;
}
};