LeetCode——整数转罗马数字

Myth丶恋晨 2022-05-21 12:28 303阅读 0赞

题目:

罗马数字包含以下七种字符: IVXLCDM

  1. 字符 数值
  2. I 1
  3. V 5
  4. X 10
  5. L 50
  6. C 100
  7. D 500
  8. M 1000

例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

  • I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
  • X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。
  • C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。

给定一个整数,将其转为罗马数字。输入确保在 1 到 3999 的范围内。

示例 1:

  1. 输入: 3
  2. 输出: "III"

示例 2:

  1. 输入: 4
  2. 输出: "IV"

示例 3:

  1. 输入: 9
  2. 输出: "IX"

示例 4:

  1. 输入: 58
  2. 输出: "LVIII"
  3. 解释: C = 100, L = 50, XXX = 30, III = 3.

示例 5:

  1. 输入: 1994
  2. 输出: "MCMXCIV"
  3. 解释: M = 1000, CM = 900, XC = 90, IV = 4.

思路:

这个题目可以看做是在十进制里求每位的数的升级版,先按照罗马字母求出每位的数字,然后再判断是否适用特殊规则

python代码:

  1. def intToRoman(num):
  2. """
  3. :type p: str
  4. :rtype: bool
  5. """
  6. str1 = ""
  7. m =0
  8. d=0
  9. c=0
  10. l=0;x=0;v=0;i=0
  11. m = int(num/1000);num-=m*1000#先求出M有多少
  12. if m >0:#如果M的个数大于零
  13. while (m > 0):#循环添加M
  14. str1 += "M"
  15. m -= 1
  16. if num >= 900:#这里要对特殊规则进行判断
  17. str1+="CM"
  18. num-=900
  19. #后面的跟求M一样
  20. d = int(num/500);num-=d*500;print(d)
  21. if d >0:
  22. while (d > 0):
  23. str1 += "D"
  24. d -= 1
  25. if num >=400:
  26. str1+="CD"
  27. num-=400
  28. c = int(num/100);num-=c*100
  29. if c >0:
  30. while (c > 0):
  31. str1 += "C"
  32. c -= 1
  33. if num >=90:
  34. str1+="XC"
  35. num-=90
  36. l = int(num/50);num-=l*50
  37. if l >0:
  38. while (l > 0):
  39. str1 += "L"
  40. l -= 1
  41. if num >=40:
  42. str1+="XL"
  43. num-=40
  44. x = int(num/10);num-=x*10
  45. if x >0:
  46. while (x > 0):
  47. str1 += "X"
  48. x -= 1
  49. if num >= 9:
  50. str1+="IX"
  51. num -= 9
  52. v = int(num/5);num-=v*5
  53. if v >0:
  54. while (v > 0):
  55. str1 += "V"
  56. v -= 1
  57. if num >= 4:
  58. str1+="IV"
  59. num -= 4
  60. i = int(num)
  61. if i >0:
  62. while(i>0):
  63. str1+="I"
  64. i-=1
  65. return str1
  66. if __name__ == "__main__":
  67. print(intToRoman(20))

发表评论

表情:
评论列表 (有 0 条评论,303人围观)

还没有评论,来说两句吧...

相关阅读