12.Integer to Roman

Integer to Roman

  Total Accepted: 27813  Total Submissions: 80511 My 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;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值