项目Euler 16在Javascript(2 ^ 1000)

时间:2014-03-18 03:33:51

标签: javascript

我已经在JavaScript中编写了我认为应该是Project Euler 16的工作解决方案,它可以很好地测试2的小功率 - 但是在n = 1000的情况下得到的结果不正确。这是我的代码:

function problem16(n) {

    var prod = Math.pow(2, n);
    console.log ("Prod: "+ prod);
    var sum = 0;

    while (prod >=1) {
        console.log ("Sum term: " + prod%10);

        sum += prod%10;
        console.log ("Sum: "+ sum);

        prod = Math.floor(prod / 10);
        console.log ("Prod: "+ prod);
        console.log ("------------");
        }
    return sum;

}

console.log("Sum is: " + problem16(1000));

任何帮助都非常感激。

2 个答案:

答案 0 :(得分:1)

JavaScript编号是64位浮点值。 (参见the spec。)它们的精度有限,因此一旦超过某个值,就不能准确表示所有整数。我相当确定并非所有形式的2 1000 / 10 n 的数字都可以准确表示。你将不得不为Project Euler 16找到另一种(更聪明的)方法。(你不应该对此感到惊讶。项目Euler问题不仅仅是为了简单地运用基本的编程技巧。)

答案 1 :(得分:1)

我认为您应该尝试使用BigInt()。这是一个内置对象,提供了一种表示大于(2 ^ 53)的整数的方法。

我尝试在代码中使用BigInt()解决相同的问题,并且可以正常工作。 这是我的代码:

  function powerSum(num){
  let result = String(BigInt(Math.pow(2,num)));
  let sum = 0;
  result = result.split('');
  for(let item of result){
    sum += parseInt(item);
  }
  console.log(sum);

};

powerSum(1000);