2017年12月24日 星期日

b012: 羅馬數字

b012: 羅馬數字

'''
羅馬數字是古羅馬所使用的計數系統,即使到了21世紀的現代,
還是很常見到它的蹤跡。
羅馬數字使用7個字母,
分別代表:I(1)、V(5)、X(10)、L(50)、C(100)、D(500)、M(1000),解讀方式是從左到右,把出現的字母所代表的數字加起來,但是如果右邊的數字比左邊大,則代表是大數字減去小數字,才是代表的數字,例如VIII是8,而IX是9。現在給你一個羅馬數字,你能解讀出它代表多少嗎?

輸入說明:
輸入一個羅馬數字(僅有 I、V、X、L、C、D、M 等字母,而且一定合乎羅馬數字的標準)。
輸出說明:
請輸出它代表的數字是多少。

範例輸入:
輸入1:
VIII

輸入2:
IX
範例輸出 :

輸出1:
8

輸出2:
9
'''

'''
Convert Roman Numerals
Arabic numerals:   
3999
Roman numerals:   
MMMCMXCIX
Arabic
numerals 3 9 9 9
0
1 M C X I
2 MM CC XX II
3 MMM CCC XXX III
4 CD XL IV
5 D L V
6 DC LX VI
7 DCC LXX VII
8 DCCC LXXX VIII
9 CM XC IX
'''


#Given a roman numeral, convert it to an integer.
#Input is guaranteed to be within the range from 1 to 3999.

values =    (('M',  1000),
            ('CM', 900),
            ('DCCC',800),
            ('DCC',700),
            ('DC',600),
            ('D',  500),
            ('CD', 400),
            ('CCC',300),
            ('CC',200),
            ('C', 100),
            ('XC', 90),
            ('LXXX',80),
            ('LXX',70),
            ('LX',60),
            ('L',  50),
            ('XL', 40),
            ('XXX',30),
            ('XX',20),
            ('X',  10),
            ('IX', 9),
            ('VIII',8),
            ('VII',7),
            ('VI',6),
            ('V',  5),
            ('IV', 4),
            ('III',3),
            ('II',2), 
            ('I',  1))

def RomanToInt(year):
    result = 0
    boom = []
    for i in range(len(year)):
        for letter, value in values:
            if year[i] == letter:
                boom.append(value)
    boom.append(0)
    for i in range(len(year)):
        if boom[i] >= boom[i+1]:
            result = result + boom[i]
        else:
            result = result - boom[i]
    return result

s=str(input("Enter a roman numeral > "))
print(RomanToInt(s))


====================== RESTART: F:/Python_APSC/b012.py ======================
Enter a roman numeral > DXCVIII
598
>>> 
====================== RESTART: F:/Python_APSC/b012.py ======================
Enter a roman numeral > MMMCMXCIX
3999
>>> 

沒有留言:

張貼留言

Messaging API作為替代方案

  LINE超好用功能要沒了!LINE Notify明年3月底終止服務,有什麼替代方案? LINE Notify將於2025年3月31日結束服務,官方建議改用Messaging API作為替代方案。 //CHANNEL_ACCESS_TOKEN = 'Messaging ...