38.leetcode12_integer_to_roman

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
  1. 相同的数字连写、所表示的数等于这些数字相加得到的数、如:Ⅲ=3;
  2. 小的数字在大的数字的右边、所表示的数等于这些数字相加得到的数、 如:Ⅷ=8、Ⅻ=12;
  3. 小的数字(限于 I、X 和 C)在大的数字的左边、所表示的数等于大数减小数得到的数、如:Ⅳ=4、Ⅸ=9;
  4. 正常使用时、连写的数字重复不得超过三次;
  5. 在一个数的上面画一条横线、表示这个数扩大 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

 

posted @ 2018-02-25 21:30  vlice  阅读(111)  评论(0编辑  收藏  举报