gpt4 book ai didi

javascript - 在某些情况下 Roman 到 Int 的转换不正确

转载 作者:行者123 更新时间:2023-11-30 00:02:52 25 4
gpt4 key购买 nike

我的函数如下所示:

let romanToInt = romanNumber => {
if(typeof romanNumber !== 'string') throw new TypeError('Argument must be of type String');

const values = { 'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000 };
let sum = 0;

romanNumber.split('').map(n => n.toUpperCase()).forEach(n => sum = (sum >= values[n]) ? sum + values[n] : values[n] - sum);

return sum;
}

console.log(romanToInt("MCMXCVI"));

我测试的大部分输入都是正确的,但是罗马数字 MCMXCVI 应该给我 1996,而不是 2216 ,这就是我得到的。

我找到了这个,但我不确定如何实现它:

You must separate ones, tens, hundreds, and thousands as separate items. That means that 99 is XCIX, 90 + 9, but never should be written as IC. Similarly, 999 cannot be IM and 1999 cannot be MIM.

最佳答案

根据您的问题,您需要满足不同的项目。一种简单的方法是简单地使您的值集更大,并寻找多字符匹配项。这是可能的,因为罗马数字只允许几种组合。我把 fiddle 放在一起了here

const values = { 
'I': 1,
'V': 5,
'X': 10,
'L': 50,
'C': 100,
'D': 500,
'M': 1000,
'CM': 900,
'CD': 400,
'XC': 90,
'XL': 40,
'IX': 9,
'IV': 4
};

let sum = 0;

while(romanNumber.length > 0){
let piece = romanNumber.substring(0,2);
if(values[piece]){
sum += values[piece];
romanNumber = romanNumber.substring(2);
}else if(values[piece[0]]){
sum += values[piece[0]];
romanNumber = romanNumber.substring(1);
}
}

return sum;

关于javascript - 在某些情况下 Roman 到 Int 的转换不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39684918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com