gpt4 book ai didi

javascript - 使用 JavaScript 的罗马数字转换器

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:21:49 25 4
gpt4 key购买 nike

我在不使用下划线的情况下使它工作,但作为一个额外的挑战,我尝试使用下划线将罗马数字转换为阿拉伯数字。以下是我的尝试。它有效,除了“下一个”数字大于“当前”数字的情况。我真的不确定为什么,但是当我检查 if(next>= num) 时,if block 甚至没有被执行?

var DIGIT_VALUES = {
I: 1,
V: 5,
X: 10,
L: 50,
C: 100,
D: 500,
M: 1000
};

var translateRomanNumeral = function(roman) {
// if it's not in the digit values object, return null
for (var i = 0; i < roman.length; i++) {

if (!(roman[i] in DIGIT_VALUES)) {
return null;
}

}
//with underscore:
var romanTranslated = reduce(roman, function(memo, letter, i) {
var prev = DIGIT_VALUES[roman[i - 1]];
var num = DIGIT_VALUES[letter];
var next = DIGIT_VALUES[roman[i + 1]];
if (next === undefined || next <= num) {
return memo + num;
}

由于某种原因没有执行:

    if (next >= num) {
var diff = num - prev;
console.log(diff);
return memo + (diff - prev);
}
}, 0);
// grab the first one

//1
// console.log(num);
return romanTranslated;


};

console.log(translateRomanNumeral("LXIV")); //returns 66 ---> should return 64
console.log(translateRomanNumeral("CI")); //working --> returns 101
console.log(translateRomanNumeral("MMMMCCL")); // working ---> returns 4250.
//works!

最佳答案

您可以使用 Array#reduce 的简洁版本并查看实际值和下一个值。

function parseRoman(s) {
var val = { M: 1000, D: 500, C: 100, L: 50, X: 10, V: 5, I: 1 };
return s.toUpperCase().split('').reduce(function (r, a, i, aa) {
return r + (val[a] < val[aa[i + 1]] ? -val[a] : val[a]);
}, 0);
}

console.log(parseRoman("LXIV")); // 64
console.log(parseRoman("IX")) // 9
console.log(parseRoman("IV")) // 4
console.log(parseRoman("CI")); // 101
console.log(parseRoman("MMMMCCL")); // 4250

关于javascript - 使用 JavaScript 的罗马数字转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32926183/

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