首页 > 解决方案 > 确定罗马数字转换器的键值对

问题描述

我找到的每个解决方案都使用以下对象。

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}

当我自己尝试这个问题时,我不太确定在构造对象时哪些罗马数字是多余的。在程序上,我们如何到达这个对象?例如,我怎么知道“VI: 6”是不必要的,但“IV: 4”是不必要的?

标签: javascript

解决方案


当一个符号出现在一个更大(或相等)的符号之后时,它被添加 示例:VI = V + I = 5 + 1 = 6 示例:LXX = 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)。

在该映射中使用 XI 之类的东西会给你一个错误的结果。对于 XIV,您将有 XI (11) + V (5) = 16,而不是 X (10) + IV (4) = 14。


推荐阅读