因為做練習接觸稻穀羅馬數字,才知道原來以前的數字那麼複雜、限制那麼多,而現在我們每天在用的阿拉伯數字卻是如此方便!人類的進化總是朝著更方便的方向走,用到後來覺得一切都如此合理與正常,卻不知在遠久的年代裡,也曾有這樣的紀錄數字方式,以及進位的演化。
每學一樣知識總是有驚嘆的部份,很難想像那沒有「零」的年代,且是一種談論禁忌,而在唸出數字時需要花腦筋想一下才能解讀數字,真的很神奇。
這個習題是寫出一個函式,給一個阿拉伯數字,必須回傳羅馬數字,當然也應該要了解一下羅馬數字的規則,感謝網路找到這個解說,算是最清楚了,這篇是觀看這個影片的筆記。知道規則後就開始思考如何轉化成 JS,前人寫的這篇也很值得參考。
認識古羅馬數字的字符
基本字符:
I = 1
V = 5
X = 10
L = 50
C = 100
D = 500
M = 1000
重點:七個拉丁字母 / 數字5 很重要 / 是種十進制系統 / 字符的值與位置無關(非位置計數法)
計數規則
- 相同的字符相連,表示的數=字符相加得到的數 → III = 3
- **右加左減** 小的字符在大的字符的右邊,表示的數等於這些字符相加的數 → VIII = 8 / XII = 12
- 只有 I, X, C 可以把小的字符寫在大的字符的左邊,所表示的數等於大數減小數所得到的數 → IV=4 (5減左邊的1) / IX = 9 (10減左邊的1)。這種情況下,大的字符左邊最多只能有一個小的字符。8 不可以寫成 IIX,而是 VIII
- I 右邊最大字符為 X、 X 右邊最大字符為 C、 C 右邊最大字符為 M。99 = XCIM 而不是 IC
- 相同字符不可重複超過三次 4 = IV (但仍有古蹟是寫IIII)
- 在一個數的上面畫橫線,表示這個數增值1000倍。 V = 5, V上面有橫線為5000
- 滿足上面規則的情況下,要用最少的字符表示,如100 = C,而不是LL。
計數範例
- I, II, III, IV, V, VI, VII, VIII, IX, X, XI,XII (1-12)
- 91 = XCI → C100-X10 + I 1
- 2017 = MMXVII → MM 2000 + X 10 + VII 7
- 12345 = XIICCCXLV → XII 12000 + CCC 300 + XLV 45 (L50 - X 10 + V 5)
- XLIIDC = 42600 → XLII (L50- X10 + II 2) + DC (D500 + C100)
- 加法運算 XIX + XXII = XLI 19+22 = 41
- LXXVII - XLVIII = XXIX 77 - 48 =
關於 0
- 羅馬計數系統中沒有表示0的字符。歐洲教會阻止0的傳播。
- 公元725年,聖彼得主教用字母N(N是 nulla 的簡稱,拉丁文解釋為零)代表零。
其他
- 小寫拉丁字母表示數字 i, ii, iii, iv… 西羅馬帝國滅亡之後,開始引入小寫,規則與大寫相同,但使用範圍與用途不同,大寫是在建築、鐘錶、日曆、書籍文件、人名X世、文章編號。
- 小寫用在有序列表(ordered list)的編號上
###
先決定從大到小還是從小到大去對應
遇到5 轉成 V(1位) ,遇到10 轉成 X(2位)
從左到右逐字判斷