题目:
Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999
分析:
罗马数字由“IVXLCDM”等组成,分别表示1,5,10,50,100,500,1000。
根据规则个位数上的1 2 3 4 5 6 7 8 9的罗马表示为I II III IV V VI VII VIII IX
十位数上的1 2 3 4 5 6 7 8 9的罗马表示为X XX XXX XL L LX LXX LXXX XC
百位数上的1 2 3 4 5 6 7 8 9的罗马表示为C CC CCC CD D DC DCC DCCC CM
千位数上的1 2 3的罗马表示为M MM MMM
class Solution {
public:
string intToRoman(int num) {
char roman[] = {'I', 'V', 'X', 'L', 'C', 'D', 'M'};
string result;
for(int i = 0; num > 0; i += 2, num /= 10) {
int x = num % 10;
switch(x) {
case 1:
case 2:
case 3:
result = string(x, roman[i]) + result;
break;
case 4:
result = roman[i+1] + result;
result = roman[i] + result;
break;
case 5:
result = roman[i+1] + result;
break;
case 6:
case 7:
case 8:
result = string(x-5, roman[i]) + result;
result = roman[i+1] + result;
break;
case 9:
result = roman[i+2] + result;
result = roman[i] + result;
break;
default:
break;
}
}
return result;
}
};