Solving Project Euler 16 with Javascript



我正在研究Project Euler,用JavaScript编写解决方案。然而,问题16似乎无法用Javascript解决:

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

数字21000的数字之和是多少?

因为JavaScript的64位精度不足以容纳这个数字,所以计算Math.pow(2, 1000)得到1.0715086071862673e+301。显然,我不能用这个值来解决问题,因为它不包含21000的所有数字。

有其他方法可以解决这个问题吗?请注意,我不是在问如何绕过精度问题;然而,如果这是唯一的解决方案,那就顺其自然吧。

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

(顺便说一句,我并不是想作弊,也不是想让答案脱离SO。我已经解决了它,但我必须使用Python)

可以通过将2^1000存储在(数字)数组中的简单方法来解决此问题。在不到一秒钟的时间内运行。来自这里的原创创意。

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

查看我之前问的一个问题:javascript 中的指数求和

回复谈到了JavaScript中的BigNumber。这将有助于您在处理大量数据时绕过JavaScript中的精度不足。

最新更新