我怎样才能将数字分解成它们的数字值?
How can I break numbers into their digit values?
作为罗马数字转换器算法的一部分,我想将给定的数字分解成它们的数字值。我真正想做的是:
1984 = 1000+900+80+4
最好让你知道我将在哪里使用结果。我会将结果放入一个数组中并与对应的罗马数字匹配,例如1000 = M,900 = CM,80 = LXXX,4 = IV。
1984 = MCMLXXXIV
需要什么样的函数才能产生预期的输出?
这里有两个小算法可以做到这一点:
function separate(number) {
const length = number.toString().length;
const result = [0];
let step = 1;
for (let i= 0; i< length; i++) {
step *= 10;
let part = number % step;
result.forEach(previous => {
part -= previous;
});
result[i] = part;
}
return result;
}
和
function separate(number) {
const str = number.toString();
const result = [];
for (var i = 0; i < str.length; i++) {
result[i] = str.charAt(i) * Math.pow(10, i);
}
return result;
}
它returns一个数组,其中每个数字都是分开的
我把它调整成了这个单行:
Array.from((1984).toString()).reverse().map((d, i) => d * 10 ** i)
这会给你相反的部分(最低有效数字在前);根据您的需要,您可能想在最后添加另一个 .reverse()
。
作为罗马数字转换器算法的一部分,我想将给定的数字分解成它们的数字值。我真正想做的是:
1984 = 1000+900+80+4
最好让你知道我将在哪里使用结果。我会将结果放入一个数组中并与对应的罗马数字匹配,例如1000 = M,900 = CM,80 = LXXX,4 = IV。
1984 = MCMLXXXIV
需要什么样的函数才能产生预期的输出?
这里有两个小算法可以做到这一点:
function separate(number) {
const length = number.toString().length;
const result = [0];
let step = 1;
for (let i= 0; i< length; i++) {
step *= 10;
let part = number % step;
result.forEach(previous => {
part -= previous;
});
result[i] = part;
}
return result;
}
和
function separate(number) {
const str = number.toString();
const result = [];
for (var i = 0; i < str.length; i++) {
result[i] = str.charAt(i) * Math.pow(10, i);
}
return result;
}
它returns一个数组,其中每个数字都是分开的
我把它调整成了这个单行:
Array.from((1984).toString()).reverse().map((d, i) => d * 10 ** i)
这会给你相反的部分(最低有效数字在前);根据您的需要,您可能想在最后添加另一个 .reverse()
。