题目:
Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
分析:
罗马数字的规律:
相同的数字连写、所表示的数等于这些数字相加得到的数、如:Ⅲ=3;
小的数字在大的数字的右边、所表示的数等于这些数字相加得到的数、 如:Ⅷ=8、Ⅻ=12;
小的数字(限于 I、X 和 C)在大的数字的左边、所表示的数等于大数减小数得到的数、如:Ⅳ=4、Ⅸ=9;
正常使用时、连写的数字重复不得超过三次;
在一个数的上面画一条横线、表示这个数扩大 1000 倍。
那我们可以将罗马数字和整数一一对应了
1-10 I II III IV V VI VII VIII IX X
10-100 X XX XXX XL L LX LXX LXXX XC C
100-1000 C CC CCC CD DC DCC DCCC CM M
1000-3000 M MM MMM
解题:
class Solution {
public:
string intToRoman(int num) {
static const string s[4][10]=
{
{"","I","II","III","IV","V","VI","VII","VIII","IX"},
{"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"},
{"","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"},
{"","M","MM","MMM"},
};
return s[3][num/1000%10] + s[2][num/100%10] + s[1][num/10%10] + s[0][num%10];
}
};