intToRoman

# -*- coding: utf-8 -*- ''' 把阿拉伯数字转换为罗马数字,采用查表法 罗马数字的定义:(维基百科) 罗马数字共有7个,即Ⅰ(1)、Ⅴ(5)、Ⅹ(10)、?(50)、?(100)、?(500)和?(1000)。按照下述的规则可以表示任意正整数。需要注意的是罗马数字中没有“0”,与进位制无关。一般认为罗马数字只用来记数,而不作演算。 重复数次:一个罗马数字重复几次,就表示这个数的几倍。 右加左减: 在较大的罗马数字的右边记上较小的罗马数字,表示大数字加小数字。 在较大的罗马数字的左边记上较小的罗马数字,表示大数字减小数字。 左减的数字有限制,仅限于I、X、C。比如45不可以写成VL,只能是XLV 但是,左减时不可跨越一个位值。比如,99不可以用IC( {\displaystyle 100-1} 100-1)表示,而是用XCIX( {\displaystyle [100-10]+[10-1]} [100-10]+[10-1])表示。(等同于阿拉伯数字每位数字分别表示。) 左减数字必须为一位,比如8写成VIII,而非IIX。 右加数字不可连续超过三位,比如14写成XIV,而非XIIII。(见下方“数码限制”一项。) 加线乘千: 在罗马数字的上方加上一条横线或者加上下标的?,表示将这个数乘以1000,即是原数的1000倍。 同理,如果上方有两条横线,即是原数的1000000( {\displaystyle 1000^{2}} 1000^{{2}})倍。 数码限制: 同一数码最多只能连续出现三次,如40不可表示为XXXX,而要表示为XL。 ''' class Solution(object): def intToRoman(self, num): """ :type num: int :rtype: str """ M = ['', 'M', 'MM', 'MMM'] #0, 1000, 2000, 3000 C = ['', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM'] #0, 100, 200, ... , 900 X = ['', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC'] #0, 10, 20, ... , 90 I = ['', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX'] #0, 1, 2, ... , 9 return M[num // 1000] + C[(num % 1000) // 100] + X[(num % 100) // 10] + I[num % 10]roman=Solution() print roman.intToRoman(12)


    推荐阅读