1.题目描述
Given an integer, convert it to a roman numeral.
十进制数字转为罗马数字
2.题目分析
罗马数字计数方法
基本字符 | I | V | X | L | C | D | M |
---|---|---|---|---|---|---|---|
相应的阿拉伯数字表示为 | 1 | 5 | 10 | 50 | 100 | 500 | 1000 |
- 相同的数字连写、所表示的数等于这些数字相加得到的数、如:Ⅲ=3;
- 小的数字在大的数字的右边、所表示的数等于这些数字相加得到的数、 如:Ⅷ=8、Ⅻ=12;
- 小的数字(限于 I、X 和 C)在大的数字的左边、所表示的数等于大数减小数得到的数、如:Ⅳ=4、Ⅸ=9;
- 正常使用时、连写的数字重复不得超过三次;
- 在一个数的上面画一条横线、表示这个数扩大 1000 倍。
3.解题思路
1 class Solution(object): 2 def intToRoman(self, num): 3 """ 4 :type num: int 5 :rtype: str 6 """ 7 strs="" 8 x=0 9 if num>=1000: #从千位以上开始依次计算10 x=num/100011 num-=1000*x12 strs+=x*"M"13 if num>=900: 14 num-=90015 strs+="CM"16 if num>=500:17 x=(num-500)/10018 num=num%10019 strs+="D"+x*"C"20 if num>=400:21 num-=40022 strs+="CD"23 if num>=100:24 x=num/10025 num-=x*10026 strs+=x*"C"27 if num>=90:28 num-=9029 strs+="XC"30 if num>=50:31 x=(num-50)/1032 num=num%1033 strs+="L"+x*"X"34 if num>=40:35 num-=4036 strs+="XL"37 if num>=10:38 x=num/1039 num-=x*1040 strs+=x*"X"41 if num==9:42 num=043 strs+="IX"44 if num>=5:45 x=num-546 num=047 strs+="V"+x*"I"48 if num==4:49 num=050 strs+="IV"51 if num!=0:52 strs+=num*"I"53 num=054 if num==0:55 return strs