javascript - 确定罗马数字转换器的键值对
问题描述
我找到的每个解决方案都使用以下对象。
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”是不必要的?
解决方案
当一个符号出现在一个更大(或相等)的符号之后时,它被添加 示例: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。
推荐阅读
- javascript - 获取用户输入和输出 Flask 和 HTML
- laravel - Laravel 5.8 发送带有文件附件的电子邮件
- macos - 用于单个视图的 macOS SwiftUI 导航
- javascript - 是否可以访问类原型的属性?
- vim - 从插件或 vimrc 调用时的 getbufvar 函数返回空字符串
- c# - EF Core 导航属性自行加载
- nginx - NGINX HTTP 重定向到 HTTPS 失败:“return”指令中的参数数量无效
- node.js - 猫鼬创建的对象的值在 Nestjs 中返回未定义
- r - 对具有相同结构的多个数据集使用 lapply 和 for-loop 来提取和计算每个数据帧的值
- javascript - 如何允许在 JS 中一次上传多个图像?