(12)Integer to Roman
题目:将一个整数转换成罗马数字,范围在1~3999。
很简单很暴力,只需要知道罗马数字的表示方法就可以了。
罗马数字表示:
1~9:I,II,III,IV,V,VI,VII,VIII,IX,X;
10,20~90:X,XX,XXX,XL,L,LX,LXX,LXXX,XC;
100,200~900:C,CC,CCC,CD,D,DC,DCC,DCCC,CM;
1000,2000,3000:M,MM,MMM;
那么代码就好写了:
class Solution {
public:
string intToRoman(int num) {
map<int,string> m;
m[1]="I";
m[2]="II";
m[3]="III";
m[4]="IV";
m[5]="V";
m[6]="VI";
m[7]="VII";
m[8]="VIII";
m[9]="IX";
m[10]="X";
m[20]="XX";
m[30]="XXX";
m[40]="XL";
m[50]="L";
m[60]="LX";
m[70]="LXX";
m[80]="LXXX";
m[90]="XC";
m[100]="C";
m[200]="CC";
m[300]="CCC";
m[400]="CD";
m[500]="D";
m[600]="DC";
m[700]="DCC";
m[800]="DCCC";
m[900]="CM";
m[1000]="M";
m[2000]="MM";
m[3000]="MMM";
string str = "";
int a = num / 1000, b = (num / 100)%10, c = (num / 10)%10, d = num % 10;
if(a != 0){
str += m[a*1000];
}
if(b != 0){
str += m[b*100];
}
if(c != 0){
str += m[c*10];
}
if(d != 0){
str += m[d];
}
return str;
}
};