【问题标题】:Factorial Digit Sum Project Euler 20Euler 20 阶乘数字和项目
【发布时间】:2021-08-07 20:10:33
【问题描述】:

下面的代码我需要一些帮助。

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,但您必须从一开始就这样做。

标签: javascript factorial bigint


【解决方案1】:

您正在对浮点数(非 bigint)进行运算,然后在最后转换为 bigint,这不会完成任何事情。如果乘法溢出,您将得到一个不准确的数字,并且在转换为 bigint 时将保持这种不准确。相反,请始终使用 bigint:

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);

【讨论】:

  • 非常感谢。我没有经常使用 BigInts,我不知道。这工作得很好!
猜你喜欢
  • 2021-12-23
  • 1970-01-01
  • 1970-01-01
  • 2021-08-11
  • 2022-11-18
  • 2020-05-29
  • 2022-01-11
  • 2017-07-20
  • 2013-10-20
相关资源
最近更新 更多