var number = 342345820139586830203845861938475676
var output = []
var sum = 0;
while (number) {
output.push(number % 10);
number = Math.floor(number/10);
}
output = output.reverse();
function addTerms () {
for (i = 0; i < output.length; i=i+2) {
var term = Math.pow(output[i], output[i+1]);
sum += term;
}
return sum;
}
document.write(output);
document.write("<br>");
document.write(addTerms());
我正在尝试取大号并将其拆分为数字。然后,找到第一个数字的总和,第二个数字提升到第4个,第5个数字提升到第6个,依此类推。由于某种原因,我的数组返回奇怪的数字,导致我的总和关闭。正确答案是2517052.谢谢
答案 0 :(得分:1)
您在JavaScript中遇到了精确问题。在开始做任何事情之前,只需评估number
的当前值,结果可能会让您感到惊讶:
>>> var number = 342345820139586830203845861938475676; number;
3.423458201395868e+35
另请参阅:What is JavaScript's highest integer value that a Number can go to without losing precision?
要解决您的问题,我会将您的输入数字存储为数组(或者甚至是字符串),然后将数字拉出来。
这将解决您的计算,预期结果为2517052:
var number = "342345820139586830203845861938475676";
var sum = 0;
for(var i=0; i<number.length; i=i+2){
sum += Math.pow(number.charAt(i), number.charAt(i+1));
}
sum;
答案 1 :(得分:1)
JavaScript以浮点格式存储数字(通常为double
)。 double
只能存储15位数字。
您可以使用字符串存储此大号。
答案 2 :(得分:1)
将数字转换为字符串,然后迭代完成数学运算。
var number = "342345820139586830203845861938475676";//number definition
var X = 0;//some iterator
var numberAtX = 0 + number.charAt(X);//number access
答案 3 :(得分:1)
如上所述,这是数字精度的问题。它适用于使用本机数字格式的所有编程语言。如果您使用字符串
,您的问题可以正常工作var number = '342345820139586830203845861938475676'
var digits = number.split('')
var total = 0
while (digits.length > 1) {
var [n, power] = digits.splice(0, 2)
total += Math.pow(n, power)
}
(结果是2517052,顺便说一下!)
答案 4 :(得分:0)
Javascript支持的最大整数是 9007199254740992 。所以只有你的输出很奇怪。
For Reference请浏览http://ecma262-5.com/ELS5_HTML.htm#Section_8.5
链接答案 5 :(得分:0)
[编辑]根据Borodins评论调整了答案。
嗯,我认为结果应该是2517052.我会说这也是一样的:var numbers = '342345820139586830203845861938475676'.split('')
,num = numbers.splice(0,2)
,result = Math.pow(num[0],num[1]);
while ( (num = numbers.splice(0,2)) && num.length ){
result += Math.pow(num[0],num[1]);
}
console.log(result); //=> 2517052
答案 6 :(得分:0)
现代浏览器支持数组方法map和reduce, 并且值得在旧版浏览器中定义。这是一个很好的机会, 如果您之前没有使用过它们。
如果你打算制作一个字符串数组, 匹配对的数字而不是分割成单个数字。 这个例子需要数字或字符串。
function sumPower(s){
return String(s).match(/\d{2}/g).map(function(itm){
return Math.pow(itm.charAt(0), itm.charAt(1));
}).reduce(function(a, b){
return a+b;
});
}
sumPower('342345820139586830203845861938475676');
alert(sumPower(s))
/*
returned value:(Number)
2517052
*/