Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M.
Symbol | Value |
---|---|
I | 1 |
V | 5 |
X | 10 |
L | 50 |
C | 100 |
D | 500 |
M | 1000 |
For example, two is written as II in Roman numeral, just two one's added together. Twelve is written as, XII, which is simply X + II. The number twenty seven is written as XXVII, which is XX + V + II.
將整數轉羅馬數字,此題目與第12題相反。
若遇到4
跟9
這兩種數字,表示法會不一樣。4
不會是IIII
,而是IV
,相當於5-1
的意思,9
不會是VIIII
,而是IX
,相當於10-1
的意思,
以此類推,40
>> XL
,90
>> XC
。
輸入的範圍介於1
to 3999
。
Input: III
Output: 3
Input: IV
Output: 4
Input: IX
Output: 9
Input: LVIII
Output: 58
這題相對於12題,算是簡單版的,
整體來說,只要將羅馬數字中相對應的數值加總,就可以得到答案,
有個例外,就是遇到4
跟9
的處理,譬如:IV
,就不是相加了,而是5-1
。
該如何處理這塊?
首先要找出,羅馬數字排列的規律,
我們可以發現它由左至右是從大到小排列的,也就是說左邊的羅馬數字通常會大於右邊的羅馬數字,除非遇到像是4
或9
這種的,那就必須相減(-
)了。
先宣告陣列:
let romanNum = {
I: 1,
V: 5,
X: 10,
L: 50,
C: 100,
D: 500,
M: 1000
}
處理相加(+
)或相減(-
)的情況:
若左邊大於等於(>=
)右邊,就相加(+
),若左邊小於(<
)右邊,就相減(-
)
將參數轉陣列,宣告加總變數:
let strAry = s.split('');
let sum = 0;
若左邊小於(<
)右邊,就相減(-
),不然就相加(+
):
for (let i = 0; i < strAry.length; i++) {
if (romanNum[strAry[i]] < romanNum[strAry[i + 1]]) {
sum -= Number(romanNum[strAry[i]]);
} else {
sum += Number(romanNum[strAry[i]]);
}
}
let romanNum = {
I: 1,
V: 5,
X: 10,
L: 50,
C: 100,
D: 500,
M: 1000
}
function romanToInt(s) {
let strAry = s.split('');
let sum = 0;
for (let i = 0; i < strAry.length; i++) {
if (romanNum[strAry[i]] < romanNum[strAry[i + 1]]) {
sum -= Number(romanNum[strAry[i]]);
} else {
sum += Number(romanNum[strAry[i]]);
}
}
return sum;
}