我找到的每个解决方案都使用以下对象。
function converter(num) {
var romanKeys =
{M:1000,CM:900,D:500,CD:400,C:100,XC:90,L:50,XL:40,X:10,IX:9,V:5,IV:4,I:1}
当我自己尝试这个问题时,我不太确定在构造对象时哪些罗马数字是多余的。程序上,我们如何到达这个对象?我怎么知道的"六世:6"是不必要的,但"IV: 4"是什么?
当一个符号出现在一个较大(或相等)的符号之后时,它被添加例如:VI = V + I = 5 + 1 = 6例如:起立= L + X + X = 50 + 10 + 10 = 70
但是如果这个符号出现在一个更大的符号之前,它将被减去示例:IV = V−I = 5−1 = 4示例:IX = X−I = 10−1 = 9
I可以放在V(5)和X(10)之前,得到4和9。
X可以放在L(50)和C(100)之前,使其成为40和90。
C可以放在D(500)和M(1000)之前,分别是400和900。
当你扫描一个罗马数字时,你从左到右看每个符号,如果它出现在一个更大的符号之前,你把它们放在一起,做减法并把它加到结果中,然后移动到符号之后。否则,您将获取单个符号并将其值添加到结果中,然后移动到下一个符号。
例如对于XIV:
1) result = 0
2) X < I => result += 10 (result = 10)
3) I < V => result += (5-1) (result = 14)
请注意,如果您使用该映射,您只需要第二个符号大于第一个符号的组合,并且减法规则适用,如上所述(CM, CD, XC, XL, IX, IV)。