python整数和罗马数互转
1、整数转罗马数
num = int(12) # 确定个十百千各自位置上的0~9对应罗马字母 c = { 'g': ('', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX'), 's': ('', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC'), 'b': ('', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM'), 'q': ('', 'M', 'MM', 'MMM') } roman = [] # 用整除和取余获得个十百千对应的数字 roman.append(c['q'][num // 1000]) roman.append(c['b'][(num // 100) % 10]) roman.append(c['s'][(num // 10) % 10]) roman.append(c['g'][num % 10]) print(199//10) print(199//10%10)
2、罗马数转整数
#https://leetcode-cn.com/problems/roman-to-integer/ #罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 #字符 数值 #I 1 #V 5 #X 10 #L 50 #C 100 #D 500 #M 1000 #输入: "III" 输出: 3 #输入: "IV"输出: 4 #输入: "IX" 输出: 9 #输入: "LVIII" 输出: 58 解释: L = 50, V= 5, III = 3. #输入: "MCMXCIV" 输出: 1994 解释: M = 1000, CM = 900, XC = 90, IV = 4. #方法一 s = "IV" d = {"I": 1, "V": 5, "X": 10, "L": 50, "C": 100, "D": 500, "M": 1000} result = 0 for i in range(len(s)): if i < (len(s)-1) and d[s[i]] < d[s[i+1]]: result = result - d[s[i]] else: result = result + d[s[i]] print(result) #方法二 s = "MCMXCIV" # M = 1000, CM = 900, XC = 90 and IV = 4 # 1994 result = 0 d = {"I": 1, "V": 5, "X": 10, "L": 50, "C": 100, "D": 500, "M": 1000} dd = ["IV", "IX", "XL", "XC", "CD", "CM"] for i in range(len(s)): print("qqqqqqqqqqqqqq",i,i+2,s[i:i + 2]) if s[i:i + 2] in dd: result -= d[s[i]] else: result += d[s[i]] print(result)
上班求生存,下班求发展