題目
十二題.png
題目十分簡單,就是將阿拉伯數字轉換為羅馬數字。此題的要點在于理解羅馬數字的表示規則。而該規則在百度百科說的十分清楚(羅馬數字)
分析
明白了羅馬數字的表示規則之后,此題就很簡單了。并且由題目可知最大為3999。這就意味著可以用一個二維數組將所有的情況簡單的列出來,如下所示:
String[][] nn={{"","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"}};
分別對應個位的1-9,十位的10-90,百位的100-900,千位的1000-3000。然后根據求得的值從數組中取得相應的值來連接字符串,生成結果。如1204,1204/1000=1,取出對應的“M”;204/100=2,2取出對應的“CC“;0/10=0,取出對應的“”;4/1=4,取出對應的“IV“。然后將這幾個字符串連接起來即是結果:“MCCIV”。
代碼
代碼為Java版,如下:
public class Solution
{
public String intToRoman(int num)
{
String[][] nn={{"","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"}};
int temp=num/1000;
String result=nn[3][temp];
num-=temp*1000;
temp=num/100;
result+=nn[2][temp];
num-=temp*100;
temp=num/10;
result+=nn[1][temp];
num-=temp*10;
temp=num;
result+=nn[0][temp];
return result;
}
}