阶乘数字和项目 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);