阶乘数字和项目 Euler 20
Factorial Digit Sum Project Euler 20
下面这段代码需要我的帮助。
function main(n) {
factCounter = 1;
for (let i = n; i > 0; --i) {
factCounter *= i;
}
let numArr = BigInt(factCounter).toString().split('');
let sum = 0;
numArr.forEach((el) => (sum += +el));
console.log(sum);
}
main(100);
这是 Project Euler #20 的解决方案,我需要从 100 中获取所有数字的总和! (阶乘)。
但出于某种原因,它给了我错误的答案。我的输出是 734,但预期输出应该是 648。
您正在对浮点数(非双整数)进行运算,然后在最后转换为双整数,这不会完成任何事情。如果乘法溢出,您将得到一个不准确的数字,并且在转换为 bigint 时将保持不准确。相反,一直使用 bigints:
function main(n) {
let factCounter = 1n;
for (let i = n; i > 0n; --i) {
factCounter *= i;
}
let numArr = factCounter.toString().split('');
let sum = 0;
numArr.forEach((el) => (sum += +el));
console.log(sum);
}
main(100n);
下面这段代码需要我的帮助。
function main(n) {
factCounter = 1;
for (let i = n; i > 0; --i) {
factCounter *= i;
}
let numArr = BigInt(factCounter).toString().split('');
let sum = 0;
numArr.forEach((el) => (sum += +el));
console.log(sum);
}
main(100);
这是 Project Euler #20 的解决方案,我需要从 100 中获取所有数字的总和! (阶乘)。 但出于某种原因,它给了我错误的答案。我的输出是 734,但预期输出应该是 648。
您正在对浮点数(非双整数)进行运算,然后在最后转换为双整数,这不会完成任何事情。如果乘法溢出,您将得到一个不准确的数字,并且在转换为 bigint 时将保持不准确。相反,一直使用 bigints:
function main(n) {
let factCounter = 1n;
for (let i = n; i > 0n; --i) {
factCounter *= i;
}
let numArr = factCounter.toString().split('');
let sum = 0;
numArr.forEach((el) => (sum += +el));
console.log(sum);
}
main(100n);