[LeetCode]Integer to Roman

来源:互联网 发布:php java性能 编辑:程序博客网 时间:2024/05/16 11:32

Given an integer, convert it to a roman numeral.

Input is guaranteed to be within the range from 1 to 3999.

class Solution {public:    char convert(char s, int i)    {    std::string table = "IVXLCDM";    if (s == 'I')  return table[i];    if (s == 'V')  return table[i + 1];    if (s == 'X')  return table[i + 2];    }    string intToRoman(int num)    {        std::string str[10] = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};     std::vector<std::string> table;    std::string ans;    for (int i = 0; i < 10; i++)    {    table.push_back(str[i]);    }    for (int i = 0; num; i += 2, num /= 10)    {            int x = num % 10;            std::string temp = table[x];    for (int j = 0; j < temp.size(); j++)    {    temp[j] = convert(temp[j], i);    }    ans = temp + ans; //顺序不能颠倒    }    return ans;    }};


下面附有罗马数字的简介:

Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ简单的罗马数字见下: 
I - 1 
II - 2 
III - 3 
IV - 4 
V - 5 
VI - 6 
X - 10 
L - 50 
C - 100 
D - 500 
M - 1000 
罗马数字共有七个,即I(1),V(5),X(10),L(50),C(100),D(500),M(1000)。按照下面的规则可以表示任意正整数。 
重复数次:一个罗马数字重复几次,就表示这个数的几倍。如:"III"表示"3";"XXX"表示"30"。 
右加左减:在一个较大的罗马数字的右边记上一个较小的罗马数字,表示大数字加小数字,如"VI"表示"6","DC"表示"600"。一个代表大数字的符号左边附一个代表小数字的符号,就表示大数字减去小数字的数目,如"IV"表示"4","XL"表示"40","VD"表示"495"。尽管在一个较大的数字的左边记上一个较小的罗马数字,表示大数字减小数字。但是,左减不能跨越等级。比如,99不可以用IC表示,肵CIX表示。 
加线乘千:在一个罗马数字的上方加上一条横线或者在右下方写M,表示将这个数字乘以1000,即是原数的1000倍。同理,如果上方有两条横线,即是原数的1000000倍。 
罗马数字起源于古罗马。一共有7个数字符号:IVXLCDM.相应的阿拉伯数字表示为:1510501005001000用罗马数字表示数时,如果几个相同的数字并列,就表示这个数的值是数码的几倍。倒如:罗马数字要表示3,可以写成III;要表示20,可以写成XX;要表示30,可写成XXX。单位限制:同样单位只能出现3次,如40不能表示为XXXX,而要表示为XL。
不相同的几个数码并列时,如果小的数码在右边,就表示数的数值是这几个数码的和;如果小的数码在基边,就表示数的数值是数码之差。例如:6用罗马数字可以表示为VI;4用罗马数字表示为IV;11用罗马数字表示为XI;48用罗马数字表示为IIL。


0 0