使用Javascript解决项目Euler 16

时间:2012-03-23 04:05:29

标签: javascript

我正在使用Project Euler,用JavaScript编写解决方案。但是,似乎问题16无法用Javascript解决:

  

2 15 = 32768,其数字之和为3 + 2 + 7 + 6 + 8 = 26.

     

数字2 1000 的数字总和是多少?

由于JavaScript的64位精度不足以容纳数字,因此计算Math.pow(2, 1000)会给出1.0715086071862673e+301。显然,我无法使用此值来解决问题,因为它不包含2 1000 的所有数字。

还有其他方法可以解决这个问题吗?请注意,我询问how to get around the precision issue;但是,如果这是唯一的解决方案,那就这样吧。

理想情况下,我想找到一个替代解决方案(可能是一种超级史诗般的数学方法吗?)。

(作为旁注,我不是想欺骗并断断续续的答案。我已经解决了,但我不得不使用Python)

2 个答案:

答案 0 :(得分:3)

可以通过在数组(数字)中存储2 ^ 1000的简单方法来解决这个问题。运行不到一秒钟。来自here的原创想法。

var number = [1],
    sum = 0;

for(var i = 0; i < 1000; i++)
{
    var overflow = 0,
        count = number.length + 1

    for(var j = 0; j < count; j++)
    {
        var digit = number[j] || 0;

        digit = 2 * digit + overflow;

        if(digit > 9)
        {
            digit -= 10;
            overflow = 1;
        }
        else
        {
            overflow = 0;
        }

        number[j] = digit;
    }
}

for(var i = 0; i < 1000; i++)
{
    sum += number[i];
}

console.log(sum);

答案 1 :(得分:1)

查看我之前提出的问题: summing exponents in javascript

该回复谈到了JavaScript中的BigNumber。这可以帮助您在处理大数字时解决JavaScript中的精确缺陷。