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/1000 11 num-=1000*x 12 strs+=x*"M" 13 if num>=900: 14 num-=900 15 strs+="CM" 16 if num>=500: 17 x=(num-500)/100 18 num=num%100 19 strs+="D"+x*"C" 20 if num>=400: 21 num-=400 22 strs+="CD" 23 if num>=100: 24 x=num/100 25 num-=x*100 26 strs+=x*"C" 27 if num>=90: 28 num-=90 29 strs+="XC" 30 if num>=50: 31 x=(num-50)/10 32 num=num%10 33 strs+="L"+x*"X" 34 if num>=40: 35 num-=40 36 strs+="XL" 37 if num>=10: 38 x=num/10 39 num-=x*10 40 strs+=x*"X" 41 if num==9: 42 num=0 43 strs+="IX" 44 if num>=5: 45 x=num-5 46 num=0 47 strs+="V"+x*"I" 48 if num==4: 49 num=0 50 strs+="IV" 51 if num!=0: 52 strs+=num*"I" 53 num=0 54 if num==0: 55 return strs