您的位置:首页 > 其它

12. Integer to Roman

2016-09-11 11:51 369 查看
罗马数字需要掌握的规则:

基本数字I、X、C中的任何一个,自身连用构成数目,或者放在大数的右边连用构成数目,都不能超过三个;放在大数的左边只能用一个。
不能把基本数字V、L、D中的任何一个作为小数放在大数的左边采用相减的方法构成数目;放在大数的右边采用相加的方式构成数目,只能使用一个。
V和X左边的小数字只能用I,且只能有1个。
L和C左边的小数字只能用X,且只能有1个。
D和M左边的小数字只能用C,且只能有1个。

方法1:

class Solution {
public:
string intToRoman(int num) {
vector<string> Roman={"I","V","X","L","C","D","M"};
vector<int> dig={1,5,10,50,100,500,1000};
string tmp="";
int n=dig.size();
int i=n-1;
while(num!=0&&i>=0)
{
if(num/dig[i]!=0)
{
tmp+=Roman[i];
num-=dig[i];
}
else
{
if(dig[i]==10||dig[i]==100||dig[i]==1000)
{
if(dig[i]-dig[i-2]<=num)
{
num-=(dig[i]-dig[i-2]);
tmp+=Roman[i-2];
tmp+=Roman[i];
}
}
else
{
if(i>0&&dig[i]-dig[i-1]<=num)
{
num-=(dig[i]-dig[i-1]);
tmp+=Roman[i-1];
tmp+=Roman[i];
}
}
i--;
}

}
return tmp;
}
};

方法2:
经过归纳,可以总结为1,4,5,9四种情况

class Solution {
public:
string intToRoman(int num) {
vector<string> Roman={"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
vector<int> dig={1000,900,500,400,100,90,50,40,10,9,5,4,1};
int n=dig.size();
int i,j,k;
string tmp="";
for(i=0;i<n;i++)
{
for(j=0,k=num/dig[i];j<k;j++)
tmp+=Roman[i];
num=num%dig[i];
}
return tmp;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: