[JavaScript]Integer to Roman
Published in
Jan 5, 2021
一開始看到題目的想法是,哦~羅馬數字我只知道I,II,III….大概是前十個數字,連規則都不太清楚,所以要寫一組將數字轉換成羅馬數字的程式的前提就是將規則搞懂。
羅馬數字-拼寫規則
羅馬數字共有7個,即Ⅰ(1)、Ⅴ(5)、Ⅹ(10)、Ⅼ(50)、Ⅽ(100)、Ⅾ(500)和Ⅿ(1000)。按照下述的規則可以表示任意正整數。需要注意的是羅馬數字中沒有「0」,與進位制無關。一般認為羅馬數字只用來記數,而不作演算。
「標準」形式
- 重複數次:一個羅馬數字重複幾次,就表示這個數的幾倍。
右加左減:
1、在較大的羅馬數字的右邊記上較小的羅馬數字,表示大數字加小數字。
2、在較大的羅馬數字的左邊記上較小的羅馬數字,表示大數字減小數字。
3、左減的數字有限制,僅限於Ⅰ、Ⅹ、Ⅽ。比如45是ⅩⅬⅤ,不用ⅤⅬ。但是,左減時不可跨越一個位值。比如,99是ⅩⅭⅨ,不用ⅠⅭ。(等同於阿拉伯數字每位數字分別表示。)
4、左減數字必須為一位,比如8是Ⅷ,不用ⅡⅩ。
5、右加數字不連續超過三位,比如14是ⅪⅤ,不用ⅪⅢ。
加線乘千:
- 在羅馬數字的上方加上一條橫線或者加上下標的Ⅿ,表示將這個數乘以1000,即是原數的1000倍。同理,如果上方有兩條橫線,即是原數的1000000倍
開始做題目
其實一開始看到這規則,眼睛都花了~ 但仔細觀察了一下其實很好懂。
因為羅馬數字有7個字母及特殊的規則(例如數字4的表示方法為IV),
- 先宣告一個變數來放等等要用來比對的羅馬數字
- 使用for…in的方法來比對,假設我們輸入要轉為羅馬數的數字(num) 為3,當 3 > romanType[key] 就會加上一個key (I), num則會減掉romanType[key]的值,直到結束~