/*
### 题目
罗马数字转整数。
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
字符 | 数值
---|---
I | 1
V | 5
X | 10
L | 50
C | 100
D | 500
M | 1000
例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。
通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:
- I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
- X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。
- C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。
- 输入: "III",输出: 3
- 输入: "IV",输出: 4
- 输入: "IX",输出: 9
- 输入: "LVIII",输出: 58,解释: L = 50, V= 5, III = 3.
- 输入: "MCMXCIV",输出: 1994,解释: M = 1000, CM = 900, XC = 90, IV = 4.
*/
var romanToInt = function(s) {
//先解构,
let awe = [],
newnum = 0;
awe['I'] = 1;
awe['V'] = 5;
awe['X'] = 10;
awe['L'] = 50;
awe['C'] = 100;
awe['D'] = 500;
awe['M'] = 1000;
console.log(awe); // [I: 1, V: 5, X: 10, L: 50, C: 100, …]
for (var i = 0; i < s.length; i++) {
//先判断最后一位的后一位是否存在
if (!awe[s[i + 1]]) {
newnum += awe[s[i]];
break
}
//正常运算
if (awe[s[i]] >= awe[s[i + 1]]) {
newnum += awe[s[i]];
} else {
//此位小于后位,加上后位进行运算,记得i+1
newnum = newnum + awe[s[i + 1]] - awe[s[i]];
i++;
}
}
return newnum
};
// var romanToInt = function(s) {
// var roman = ["I","V","IV","X","L","C","D","M"];
// var int = [1,5,4,10,50,100,500,1000];
// var result = "";
// for(var i = 0;i < roman.length;i++){
// if(roman[i] == "")
// }
// if(){
// }else{
// result = s.split("")
// }
// console.log(typeof result)
// var intArr = result.map(function(x){
// return int[roman.indexOf(x)]
// });
// return Number(intArr.join(""));
// };
console.log(romanToInt("III"));
console.log(romanToInt("IV"));
console.log(romanToInt("IX"));
console.log(romanToInt("LVIII"));
console