罗马数字转换器所需key-value键值对的推导规则
罗马数字转换映射表的构建规则
要判断哪些条目需要加入映射表,核心是依据罗马数字的标准书写规则:
核心判断逻辑
- 所有可以通过「大数值在前、小数值在后累加拼接」得到的组合都是冗余的,不需要单独加入映射表
比如VI:6就属于冗余条目:6可以拆为5+1,对应基础字符V和I拼接即可得到正确写法,不需要额外定义映射。 - 所有属于合法减记规则的组合都必须加入映射表,否则会生成不符合规范的罗马数字
罗马数字仅允许6种合法的减记组合(小值写在大值左侧表示相减):IV(4)、IX(9)、XL(40)、XC(90)、CD(400)、CM(900)。以IV:4为例,如果没有这个映射,转换逻辑会把4转为四个I拼接的IIII,不符合标准写法,所以必须加入映射表。
映射表推导步骤
- 先加入7个基础罗马字符的映射:
- I:1、V:5、X:10、L:50、C:100、D:500、M:1000
- 再加入全部6种合法减记组合的映射:
- IV:4、IX:9、XL:40、XC:90、CD:400、CM:900
- 最后把所有映射条目按数值从大到小排序,就得到了你提到的标准转换映射表:
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} // 后续转换逻辑:遍历映射表,每次匹配最大可用值,拼接字符后扣除对应数值,直到num为0即可 }
内容的提问来源于stack exchange,提问作者untitiledunmastered
相关产品推荐
相关产品推荐

