标签:
罗马数字来源于古罗马编码系统。它们是基于字母表的特定字母的组合,所表示的数等于这些数字相加(或者是相减)得到的数。前十位的罗马数字是:
I,II,III,IV,V,VI,VII,VIII,IX和X。
罗马记数系统不是直接的十进制为基础,它没有零。罗马数字是根据这七个符号的组合:
符号值
I
1
(unus)
V
5
(quinque)
X
10
(decem)
L
50
(quinquaginta)
C
100
(centum)
D
500
(quingenti)
M
1
,
000
(mille)
更多额外的关于罗马数字的信息可以参考维基百科的文章.
在这个任务里,你应该返回给出指定的整数值的范围从
1
到
3999
的罗马数字。
输入: 一个整数 (
int
).
输出: 一个字符串形式的罗马数字 (
str
).
前提:
0
< number <
4000
6
76
499
3888
VI
LXXVI
CDXCIX
MMMDCCCLXXXVIII
将数字从大到小拆分,需把握规律,依次将结果保存到列表中,最后打印出来。
def checkio(num): roman = [[‘‘, ‘I‘, ‘II‘, ‘III‘, ‘IV‘, ‘V‘, ‘VI‘, ‘VII‘, ‘VIII‘, ‘IX‘], [‘‘, ‘X‘, ‘XX‘, ‘XXX‘, ‘XL‘, ‘L‘, ‘LX‘, ‘LXX‘, ‘LXXX‘, ‘XC‘], [‘‘, ‘C‘, ‘CC‘, ‘CCC‘, ‘CD‘, ‘D‘, ‘DC‘, ‘DCC‘, ‘DCCC‘, ‘CM‘], [‘‘, ‘M‘, ‘MM‘, ‘MMM‘]] result = [] result.append(roman[3][ num / 1000 % 10 ]) result.append(roman[2][ num / 100 % 10 ]) result.append(roman[1][ num / 10 % 10 ]) result.append(roman[0][ num % 10 ]) return ‘‘.join(result) text = ‘‘‘6 76 499 3888‘‘‘ for line in text.split(‘\n‘): print checkio(int(line))
def operate(data, divisor, str1, str2, str3): result = ‘‘ temp = data // divisor if temp: if temp >= 5: if temp == 9: result = str1 + str3 temp -= 9 else: result = str2 temp -= 5 if temp: if temp == 4: result += str1 + str2 else: result += str1 * temp return result def checkio(data): result = [] temp = data // 1000 if temp: result.append(‘M‘ * temp) data %= 1000 temp = operate(data, 100, ‘C‘, ‘D‘, ‘M‘) if temp: result.append(temp) data %= 100 temp = operate(data, 10, ‘X‘, ‘L‘, ‘C‘) if temp: result.append(temp) data %= 10 temp = operate(data, 1, ‘I‘, ‘V‘, ‘X‘) if temp: result.append(temp) return ‘‘.join(result) text = ‘‘‘6 76 499 3888‘‘‘ for line in text.split(‘\n‘): print checkio(int(line))
标签:
原文地址:http://www.cnblogs.com/yestreenstars/p/5485178.html