链接: https://oj.leetcode.com/problems/integer-to-roman/
题目上已经说最大出现的整型值为3999,这样就很简单了。
class Solution
{
public:
string intToRoman(int num)
{
string ans;
char str_num[8];
sprintf(str_num,"%d",num); //the max num is 3999
int n=strlen(str_num);
for(int i=0;i<n;i++)
{
int t=str_num[i]-'0';
if(n-i==4)
{
for(int j=0;j<t;j++)
ans+="M"; //1000
}
if(n-i==3)
{
if(t==9)
ans+="CM"; //900
else if(t==4)
ans+="CD"; //400
else
{
if(t>=5)
{
ans+="D"; //500
for(int j=0;j<t-5;j++)
ans+="C"; //100
}
else
{
for(int j=0;j<t;j++)
ans+="C"; //100
}
}
}
if(n-i==2)
{
if(t==9)
ans+="XC"; //90
else if(t==4)
ans+="XL"; //40
else
{
if(t>=5)
{
ans+="L"; //50
for(int j=0;j<t-5;j++)
ans+="X"; //10
}
else
{
for(int j=0;j<t;j++)
ans+="X"; //10
}
}
}
if(n-i==1)
{
if(t==9)
ans+="IX"; //9
else if(t==4)
ans+="IV"; //4
else
{
if(t>=5)
{
ans+="V"; //5
for(int j=0;j<t-5;j++)
ans+="I";
}
else
{
for(int j=0;j<t;j++)
ans+="I";
}
}
}
}
return ans;
}
};