阿拉伯数字转换成罗马数字
2017-02-25 19:18
267 查看
问题:
Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
问题分析:
罗马数字有如下的符号代表:I(1),V(5),X(10),L(50),C(100),D(500),M(1000)
罗马数字都有如下的计数规则:
1.小数字符号在大数字符号前面表示减,例如:IV=5-1=4;
2.小数字符号在大数字符号后面表示加,例如:VI=5+1=6;
3.若干个相同符号连写表示这些符号代表的数相加,例如:III=1+1+1=3;
同样也具有如下的组合规则:
1.基本数字I、X、C中的任何一个,自身连用 构成的数目,或者放在大数的右边连用构成数目,都不能超过三个;放在大数左边的只能一个。
2.不能把基本数字V、D、L中的任何一个作为小数放在大数的左边采用相减的方法构成数目;放在大数的右边采用相加的方式构成数目,只能使
用一个。
3.V和X左边的小数只能用 I。
4.L和C左边的小数只能用X。
5.D和M左边的小数只能用C。
代码编写分析:
把所有小数字在前的组合也作为基本数字,做一个对应的映射表
比如:IV=1-5=4;IX=1-10=9;XL=10-50=40;XC=10-100=90;CD=100-500=400;CM=100-1000=900。
因此可以得到对应的映射:
unsigned int val[]={1000,900,500,400,100,90,50,40,10,9,5,4,1};
string r[]={"M","CM","D”,“CD”,"C","XC”,"L","XL","X","IX",V","IV","I"}
首先定义一个string re,对于阿拉伯数字num,遍历数组val,如果num>=val[i],则结果保留r[i],做操作re+=r[i],同时更新num=num-val[i],直到num=0为止。
代码如下:
class Solution {
public:
string intToRoman(int num) {
string re="";
if(num<1||num>3999)
return re;
unsigned int val[]={1000,900,500,400,100,90,50,40,10,9,5,4,1};
unsigned int length=sizeof(val)/sizeof(int);
string r[]={"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
for(int i=0;i<length;i++)
{
while(num>=val[i])
{
re+=r[i];
num-=val[i];
}
}
return re;
}
};
Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
问题分析:
罗马数字有如下的符号代表:I(1),V(5),X(10),L(50),C(100),D(500),M(1000)
罗马数字都有如下的计数规则:
1.小数字符号在大数字符号前面表示减,例如:IV=5-1=4;
2.小数字符号在大数字符号后面表示加,例如:VI=5+1=6;
3.若干个相同符号连写表示这些符号代表的数相加,例如:III=1+1+1=3;
同样也具有如下的组合规则:
1.基本数字I、X、C中的任何一个,自身连用 构成的数目,或者放在大数的右边连用构成数目,都不能超过三个;放在大数左边的只能一个。
2.不能把基本数字V、D、L中的任何一个作为小数放在大数的左边采用相减的方法构成数目;放在大数的右边采用相加的方式构成数目,只能使
用一个。
3.V和X左边的小数只能用 I。
4.L和C左边的小数只能用X。
5.D和M左边的小数只能用C。
代码编写分析:
把所有小数字在前的组合也作为基本数字,做一个对应的映射表
比如:IV=1-5=4;IX=1-10=9;XL=10-50=40;XC=10-100=90;CD=100-500=400;CM=100-1000=900。
因此可以得到对应的映射:
unsigned int val[]={1000,900,500,400,100,90,50,40,10,9,5,4,1};
string r[]={"M","CM","D”,“CD”,"C","XC”,"L","XL","X","IX",V","IV","I"}
首先定义一个string re,对于阿拉伯数字num,遍历数组val,如果num>=val[i],则结果保留r[i],做操作re+=r[i],同时更新num=num-val[i],直到num=0为止。
代码如下:
class Solution {
public:
string intToRoman(int num) {
string re="";
if(num<1||num>3999)
return re;
unsigned int val[]={1000,900,500,400,100,90,50,40,10,9,5,4,1};
unsigned int length=sizeof(val)/sizeof(int);
string r[]={"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
for(int i=0;i<length;i++)
{
while(num>=val[i])
{
re+=r[i];
num-=val[i];
}
}
return re;
}
};
相关文章推荐
- Python简单实现阿拉伯数字和罗马数字的互相转换功能示例
- 【Leetcode-13】罗马数字转换为阿拉伯数字
- 58. 分析、测试与总结:罗马数字和阿拉伯数字的转换[roman to integer and integer to roman in c++]
- 将阿拉伯数组转换成为罗马数字
- 将1到1000的阿拉伯数字转换为罗马数字
- Roman to Integer:转换罗马数字到阿拉伯数字
- 13 12罗马数字和阿拉伯数字互相转换
- 分析、测试与总结:罗马数字和阿拉伯数字的转换[roman to integer and integer to roman in c++]
- 经典题:罗马数字和阿拉伯数字的相互转换
- 对一个罗马数字与阿拉伯数字转换算法的分析
- Python将阿拉伯数字转换为罗马数字的方法
- 将阿拉伯数字转换为罗马数字
- 罗马数字与阿拉伯数字相互转换
- 将阿拉伯数字转换为罗马数字
- JAVA 阿拉伯数字转换成罗马字符序号和ASCII码表
- php实现阿拉伯数字和罗马数字相互转换的方法
- 学以致用-Excel Arabic函数(将阿拉伯数字转换为罗马数字)的VBA实现
- 罗马数字与阿拉伯数字的相互转换
- 阿拉伯数字转换成罗马数字
- Java经典题:罗马数字和阿拉伯数字的相互转换