使徒行傳22:28 千夫長說:「我用許多銀子才入了羅馬的民籍。」保羅說:「我生來就是。」
=============================================================
羅馬數字問題
出自:雄中八十九學年度『資訊學科能力競賽』程式設計試題
題目:
羅馬數字是分別以I, V, X, L, C, D, M來代表1, 5, 10, 50, 100, 500, 1000的一種數字系統
I→1, V→5, X→10, L→50, C→100, D→500, M→1000
而其他的數字,則是前列的字母以位中央的主數以左減、右加的方式複合而成
例:
IV=4[5-1]
XI=11[10+1]
XLI=41[50-10+1]
XL IV=44[50-10+(4)]
就如上例所示,主數、左數都是以一個字母來表示,但右數則是可以又再以同法再複合而成
例:
44=XL IV
947 = 1000-100+(47) = 1000-100+[50-10+(7)] = 1000-100+{[50-10+(5+2)] = 1000-100+{[50-10+(5+1+1)]即為CMXLVII
至於左數,則必須為I,X,C(1,10,100)等數字,以5,50,500為左數的數字均視為不合法,例:50=L,而LC(100-50)則不合法,而左數的表示亦須以最接近欲表示數字的方式呈現
例:49=IL[50-1]而不是XLIX[50-10+10-1]
由上列的規則,我們便可以了解到,主數能表達的數字最大,左數次之,右數再次之,但右數的主數字絕對不能大於左數
例:45=XLV,以ICVII表示106則不合法
在沒有左數的情形下,主數和右數的主數數字可以相同
例:2=II[1+1],1900=MCM[1000+(1000-100)]
至於主數的判定則由上規則便可以發現到1~3是I,4~8是V,9~39為X,40~89為L,90~399為C,而400~899為D,而900~3999為M
下面有兩個子題,每題10分,請依序作出
(1)在輸入一個1~3999的阿拉伯數字後,將其轉換成為用羅馬數字來表示
(2)在輸入一個羅馬數字後,請表示成阿拉伯數字(請特別注意,此子題非常重視數「合法性」的判斷,若所輸之羅馬數字不合法,應顯示不合法,不應算出其值)
評分:
(1)
答案正確性佔100%
不須考慮不正確的數字輸入
(2)
答案正確性佔100%
無法判定是否為合法羅馬數時,0分計算。
使用者一定輸入大寫字母,不會輸入IVXLCDM以外之字母,但順序有可能非法。
解答
測 試 資 料 |
|
(1)Arabic N=43 |
(1)Arabic N=1898 |
(1)Arabic N=99 |
(1)Arabic N=3999 |
(1)Arabic N=491 |
(1)Arabic N=498 |
羅馬數字換算程式 https://www.toolskk.com/roman-numerals-converter
(1) 參考解法(Java) (2) 參考解法(Java)
http://www.cis.nctu.edu.tw/~is92001/computer/programming/contest/k89/06problem.htm
===================================================
羅 馬 記 數 系 統
羅馬數字系統源自伊特魯利亞文(Etruscan),只用7個符號,包括I(1),V(5),X(10),L(50),C(100),D(500),M(1000)。羅馬數字並沒有0。可是按照下面的規則卻可以表示任意自然數。 一般認為這套記數系統只要用來記數卻不作演算。
(1)重複數次決定倍數:1個羅馬數字重複幾次,就表示這個數的幾倍。例如: ⅩⅩⅩ=30.
(2)右加左減:在一個較大的羅馬數字的右邊記上一個較小的羅馬數字,表示大數字加小數字。
在一個較大的數字的左邊記上1個較小的羅馬數字,表示大數字減小數字。
但是,左減不能跨越一個位數。比如,99不可以用IC表示,而是用XCIX表示。此外,左減數字不能超過1位,比如8寫成VIII,而非IIX。同理,右加數字不能超過3位,比如14寫成XIV,而非XIIII。
(3)數字上加橫線乘千或乘百萬:在1個羅馬數字的上方加上1條橫線或者在右下方寫M,表示將這個數字乘以1000,即是原數的1000倍。同理,如果上方有2條橫線,即是原數的1000000倍。
(4)數碼限制:同樣數碼最多只能出現3次,如40不能表示為XXXX,而要表示為XL。但是,由於IV是古羅馬神話主神朱庇特(IVPITER,古羅馬字母沒有J和U)的首字,因此有時用IIII代替IV。 一般大時鐘(不包刮英國大笨鐘)的時刻就以IIII代替IV,也可能是為了字體的對稱性。
你可以輸入1~ 3,999,999,下列換算器幫你轉換成羅馬數字。
http://www.mathland.idv.tw/history/roman.htm
[ 羅馬數字與十進位數字對照表 ]
用羅馬數字做加減還算方便,但是用來作乘除運算,那就是相當費時且沒效率的事了,還好羅馬人及中世紀歐洲人只是用來羅馬數字來「記」數,而「算」數時用的卻是算板。算版就像是古中國的算籌或是近代的算盤、計算尺和現在的計算機一般。
羅馬數字系統在歐洲流行了約一千年後,到了中世紀才漸漸被印度-阿拉伯數字取代。花拉子密(Alkhwarizmi,790~840)是一位重要的回教數學家,他在西元820年寫了一部很有影響的書,在書中他講述了印度-阿拉伯數字的十進位計數系統的用法。這本工具書後來經費波拉契(Fibonacci)(1170~1250年)引介到歐洲,並且逐漸代替了歐洲原有的算板計算及羅馬的記數系統。至此,歐洲人們可以擺脫繁瑣的計算步驟,卻多了很多時間用在數學思索活動上。
===================================================
參考資料:
http://www-history.mcs.st-andrews.ac.uk/history/Mathematicians/Fibonacci.html
http://www-history.mcs.st-andrews.ac.uk/history/Mathematicians/Al-Khwarizmi.html
http://www.mariamilani.com/rome_pictures/Ancient_Rome_military_flags.htm
http://www.enit.com.cn/discovering_italy/roma.html
http://www.rolex.com/zh-Hant/media/images/collection/rolex-gallery/datejust/dial-M116234-0006.jpg
數字的異想世界(商周出版)--Clifford A.Pickover 著作
Copyright ©2007昌爸工作坊 all rights reserved