羅馬數字Roman figures.jpg

使徒行傳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=[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~3I4~8V9~39X40~89L90~399C,而400~899D,而900~3999M

下面有兩個子題,每題10分,請依序作出
(1)在輸入一個1~3999的阿拉伯數字後,將其轉換成為用羅馬數字來表示
(2)在輸入一個羅馬數字後,請表示成阿拉伯數字(請特別注意,此子題非常重視數「合法性」的判斷,若所輸之羅馬數字不合法,應顯示不合法,不應算出其值)

評分

(1)

答案正確性佔100%

不須考慮不正確的數字輸入

(2)

答案正確性佔100%

無法判定是否為合法羅馬數時,0分計算。

使用者一定輸入大寫字母,不會輸入IVXLCDM以外之字母,但順序有可能非法。


解答

(1)Arabic N=43
Roman N=XLIII
(2)Roman N=ICXI
Illegal Roman Number

(1)Arabic N=1898
Roman N=MDCCCXCVIII
(2)Roman N=MBCCXCCIV
Illegal Roman Number

(1)Arabic N=99
Roman N=IC
(2)Roman N=XCIX
Illegal Roman Number

(1)Arabic N=3999
Roman N=MMMIM
(2)Roman N=MMMDCCCLXXXVIII
Arabic N=3888

(1)Arabic N=491
Roman N=XDI
(2)Roman N=XD
Arabic N=490

(1)Arabic N=498
Roman N=XDVIII
(2)Roman N=IDX
Illegal Roman Number


羅馬數字換算   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,古羅馬字母沒有JU)的首字,因此有時用IIII代替IV 一般大時鐘(不包刮英國大笨鐘)的時刻就以IIII代替IV,也可能是為了字體的對稱性。

 

你可以輸入1~ 3,999,999,下列換算器幫你轉換成羅馬數字。

http://www.mathland.idv.tw/history/roman.htm

 

 [ 羅馬數字與十進位數字對照表 ]

羅馬數字阿拉伯數字對照表.jpg

 

用羅馬數字做加減還算方便,但是用來作乘除運算,那就是相當費時且沒效率的事了,還好羅馬人及中世紀歐洲人只是用來羅馬數字來「記」數,而「算」數時用的卻是算板。算版就像是古中國的算籌或是近代的算盤、計算尺和現在的計算機一般。

羅馬數字系統在歐洲流行了約一千年後,到了中世紀才漸漸被印度-阿拉伯數字取代。花拉子密(Alkhwarizmi,790~840)是一位重要的回教數學家,他在西元820年寫了一部很有影響的書,在書中他講述了印度-阿拉伯數字的十進位計數系統的用法。這本工具書後來經費波拉契(Fibonacci)11701250年)引介到歐洲,並且逐漸代替了歐洲原有的算板計算及羅馬的記數系統。至此,歐洲人們可以擺脫繁瑣的計算步驟,卻多了很多時間用在數學思索活動上。

 

===================================================

 

參考資料
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

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 mini 的頭像
    mini

    這是mini的部落格

    mini 發表在 痞客邦 留言(0) 人氣()