记录几个比较简洁的写法
class Solution {
public:
string intToRoman(int num) {
const std::string m[4][10] =
{{"", "M", "MM", "MMM"},
{"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"},
{"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"},
{"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"}};
const int d[4] = {1000, 100, 10, 1};
std::string roman;
for (int i = 0; i < 4; ++i) {
roman += m[i][num / d[i]];
num %= d[i];
}
return roman;
}
};
class Solution {
public:
string intToRoman(int num) {
int values[]={1000,900,500,400,100,90,50,40,10,9,5,4,1};
string reps[]={"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
string response;
for(int i = 0;i<13;i++)
{
while(num>=values[i])//循环保证可以处理多次需要同样的罗马数字,如:XX二十
{
num -= values[i];
response += reps[i];
}
}
return response;
}
};
class Solution {
public:
string intToRoman(int num) {
string roman;
while(num){
if(num>=1000){num-=1000;roman+='M';}
else{
if(num>=900){num-=900;roman+='C';roman+='M';}
else{
if(num>=500){num-=500;roman+='D';}
else{
if(num>=400){num-=400;roman+='C';roman+='D';}
else{
if(num>=100){num-=100;roman+='C';}
else{
if(num>=90){num-=90;roman+='X';roman+='C';}
else{
if(num>=50){num-=50;roman+='L';}
else{
if(num>=40){num-=40;roman+='X';roman+='L';}
else{
if(num>=10){num-=10;roman+='X';}
else{
if(num>=9){num-=9;roman+='I';roman+='X';}
else{
if(num>=5){num-=5;roman+='V';}
else{
if(num>=4){num-=4;roman+='I';roman+='V';}
else{num-=1;roman+='I';}
}
}
}
}
}
}
}
}
}
}
}
}
return roman;
}

被折叠的 条评论
为什么被折叠?



