12、Integer to Roman

来源:互联网 发布:lua for windows 5.1 编辑:程序博客网 时间:2024/05/16 01:17

题目:

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)。按照下面的规则可以表示任意正整数。重复数次:一个罗马数字重复几次,就表示这个数的几倍。 右加左减:在一个较大的罗马数字的右边记上一个较小的罗马数字,表示大数字加小数字。在一个较大的数字的左边记上一个较小的罗马数字,表示大数字减小数字。但是,左减不能跨越等级。比如,99不可以用IC表示,用XCIX表示。 加线乘千:在一个罗马数字的上方加上一条横线或者在右下方写M,表示将这个数字乘以1000,即是原数的1000倍。同理,如果上方有两条横线,即是原数的1000000倍。 单位限制:同样单位只能出现3次,如40不能表示为XXXX,而要表示为XL。
python版本:

class Solution(object):    def intToRoman(self, num):        """        :type num: int        :rtype: str        """        roman = [            ["","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"],            ["","M","MM","MMM"]            ]        digit = 0        res = ""        while num>0:            remain = num%10            res = roman[digit][remain]+res            num = num/10            digit += 1        return res

c++版本:

class Solution {public:    string intToRoman(int num) {        string roman[][10] = {            {"","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"},            {"","M","MM","MMM"}            };                                      //1-9,10-90,100-900,1000-3000        string res = "";        int digit = 0;        while(num>0)        {            int remain = num%10;            res = roman[digit][remain]+res;            digit++;            num = num/10;        }        return res;    }};


数字共有七个,即I(1),V(5),X(10),L(50),C(100),D(500),M(1000)。按照下面的规则可以表示任意正整数。重复数次:一个罗马数字重复几次,就表示这个数的几倍。 右加左减:在一个较大的罗马数字的右边记上一个较小的罗马数字,表示大数字加小数字。在一个较大的数字的左边记上一个较小的罗马数字,表示大数字减小数字。但是,左减不能跨越等级。比如,99不可以用IC表示,用XCIX表示。 加线乘千:在一个罗马数字的上方加上一条横线或者在右下方写M,表示将这个数字乘以1000,即是原数的1000倍。同理,如果上方有两条横线,即是原数的1000000倍。 单位限制:同样单位只能出现3次,如40不能表示为XXXX,而要表示为XL。
0 0
原创粉丝点击