我正在使用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)
答案 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中的精确缺陷。