a013: 羅馬數字
這篇教學會示範 ZeroJudge 基礎題庫「a013: 羅馬數字」的解題過程。
題目需求
題目會提供兩個正整數的「羅馬數字」,需要計算這兩個數字相減的「絕對值」,再轉換成羅馬數字輸出。
題目連結:a013: 羅馬數字
解答
參考「羅馬數字轉換」教學文章,分別將「羅馬數字轉阿拉伯數字」和「阿拉伯數字轉羅馬數字」的程式,定義為兩個函式。
table = {'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}
# 羅馬數字轉阿拉伯數字
def roman_int(n):
roman = [i for i in n]
r = roman[::-1]
output = table[r[0]]
for i in range(1, len(r)):
if table[r[i]] < table[r[i-1]]:
output = output - table[r[i]]
else:
output = output + table[r[i]]
return output
num_table = [[1000,'M'],[900,'CM'],[500,'D'],[400,'CD'],[100,'C'],[90,'XC'],[50,'L'],[40,'XL'],[10,'X'],[9,'IX'],[5,'V'],[4,'IV'],[1,'I']]
# 阿拉伯數字轉羅馬數字
def int_roman(n):
num = int(n)
output = ''
for i in num_table:
a = divmod(num, i[0])
if a!=0:
num = a[1]
output = output + i[1]*a[0]
return output
函式定義後,就可以將輸入的文字轉換成羅馬數字,接著計算相減的絕對值,如果結果等於 0 就輸出 ZERO,如果不等於 0 就再轉換成羅馬數字輸出。
參考:絕對值 abs
while True:
try:
val = input().split(' ')
a = roman_int(val[0])
b = roman_int(val[1])
c = abs(a-b) # 計算相減的絕對值
if c==0:
print('ZERO') # 如果等於 0,輸出 ZERO
else:
print(int_roman(c)) # 如果不等於 0,轉換成羅馬數字
except:
break
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~