题目描述:Given an integer, convert it to a roman numeral.Input is guaranteed to be within the range from 1 to 3999.
看到这道题之后先学了半天罗马数字的表示方法,哈哈,发现1984可以拆成1000+900+80+4来表示,所以就只要把千位,百位,十位,个位分别表示就行,我想到的方法就是用if语句来判断,比如1000就先输出M,2000就是MM,但是这样比较麻烦,看了一下网上的代码发现用一个二维数组能相对简单一些。
代码如下:
class
Solution {
public
:
string intToRoman(
int
num) {
char
* c[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"
}
};
string roman;
roman.append(c[3][num / 1000 % 10]);
roman.append(c[2][num / 100 % 10]);
roman.append(c[1][num / 10 % 10]);
roman.append(c[0][num % 10]);
return
roman;
}
};