Roman numerals

Roman numerals

罗马数字的题目, 注意几个关键的数字即可: (100, 400, 500, 900) -> ('C', 'CD', 'D', 'CM'); (10, 40, 50, 90)->('X', 'XL', 'L', 'XC')

 

 1 def checkio(data):
 2     rel = ''
 3 
 4     thonsand = data / 1000
 5     rel += thonsand * 'M'
 6 
 7     data %= 1000
 8 
 9     table = [['C', 'CD', 'D', 'CM'], ['X', 'XL', 'L', 'XC']]
10     
11     pos = 100
12 
13     for i in range(0, 2):
14         bit = data / pos
15         if bit > 0:
16             if bit < 4: 17 rel += bit * table[i][0] 18 elif bit == 4: 19 rel += table[i][1] 20 elif bit == 5: 21 rel += table[i][2] 22 elif bit == 9: 23 rel += table[i][3] 24 else: 25 rel += (table[i][2] + table[i][0] * (bit - 5)) 26 27 data %= pos 28 pos /= 10 29 30 if data > 0: 31 unit = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X'] 32 rel += unit[data - 1] 33 34 #replace this for solution 35 return rel

另外还需注意没有个位数的情况, 即第30行所示

观摩JulianNicholls的代码

 1 elements = { 1000 : 'M', 900 : 'CM', 500 : 'D', 400 : 'CD', 
 2              100 : 'C', 90 : 'XC', 50 : 'L', 40: 'XL', 
 3              10 : 'X', 9 : 'IX', 5 : 'V', 4: 'IV', 1 : 'I' }
 4               
 5 def checkio(data):
 6     roman = ''
 7      
 8     for n in sorted(elements.keys(), reverse=True):
 9         while data >= n: 10 roman += elements[n] 11 data -= n 12 13 return roman

  sorted(elements.keys(), reverse=True), 按key从大到小排列; 思路不错, 比数位对应的值大, 即加上该数位对应的字母, 并减去对应的数值, 直到data为0

转载于:https://www.cnblogs.com/hzhesi/p/3891669.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值