題目:Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
解析:
這道題第一點告訴我們的是:一定要學好英語~!roman numeral是羅馬數字的意思。
第二點就是要見多識廣,比如瞭解羅馬數字構成(比如會百度百科)
題目本身不難,主要是在對羅馬數字的理解上。比如大於3000的數字,先是千位,有num_M個M;然後在【900,1000)範圍內加一個CM,剩下的899以內根據D(500)/CD(400)再進行劃分!
代碼:
class Solution {
public:
string intToRoman(int num) {
string str;
int num_M=num/1000;
for(int i=0;i<num_M;i++)
str+='M';
num=num%1000;
if(num>=900){
str+="CM";
num-=900;
}
if(num>=400){
if(num<500){
str+="CD";
num-=400;
}else{
str+='D';
num-=500;
}
}
int num_C=num/100;
for(int j=0;j<num_C;j++){
str+='C';
}
num=num%100;
if(num>=90){
str+="XC";
num-=90;
}
if(num>=40){
if(num<50){
str+="XL";
num-=40;
}else{
str+='L';
num-=50;
}
}
int num_X=num/10;
for(int k=0;k<num_X;k++)
str+='X';
num=num%10;
if(num==9)//後面實在不想再動腦了
str+="IX";
if(num==8)
str+="VIII";
if(num==7)
str+="VII";
if(num==6)
str+="VI";
if(num==5)
str+="V";
if(num==4)
str+="IV";
if(num==3)
str+="III";
if(num==2)
str+="II";
if(num==1)
str+="I";
return str;
}
};
然而,官網上有大神給出了一種極其精簡的方法
public static String intToRoman(int num) {
String M[] = {"", "M", "MM", "MMM"};
String C[] = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
String X[] = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
String I[] = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
return M[num/1000] + C[(num%1000)/100] + X[(num%100)/10] + I[num%10];
}
其實思想是類似的,不過它巧妙地運用String類,膜拜!