12.Integer to Roman

来源:互联网 发布:鞭长网络验证 编辑:程序博客网 时间:2024/05/16 07:07

Integer to Roman

 Total Accepted: 27813 Total Submissions: 80511My Submissions

Given an integer, convert it to a roman numeral.

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

Show Tags
Have you met this question in a real interview? 
Yes
 
No

罗马数字是由字符I,V,X,L,C,D,M等等表示的,其中
I = 1;
V = 5;
X = 10;
L = 50;
C = 100;
D = 500;
M = 1000;
接下来应该是V开始的重复,但是上面要加一个横线,表示对应数字的1000倍。
个位应该是:I,II,III,IV,V,VI,VII,VIII,IX
十位应该是:X,XX,XXX,XL,L,LX,LXX,LXXX,XC
百位应该是:C,CC,CCC,CD,D,DC,DCC,DCCC,CM

代码:这道题就当做熟悉罗马数字吧。

class Solution {
public:
    string intToRoman(int num) {
        if(num<1 || num>3999) return NULL;
        
        vector<string> *roman_bits=new vector<string>[4];
        roman_bits[0] = {"","M","MM","MMM"};
        roman_bits[1] = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
        roman_bits[2] = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
        roman_bits[3] = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
        
        int scale=1000;
        int times=0;
        string res;
        while(times<4){
            int bit=num/scale;
            res+=roman_bits[times++][bit];
            num%=scale;
            scale/=10;
        }
        return res;
    }
};

0 0
原创粉丝点击