我已经在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));
任何帮助都非常感激。
答案 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);