使用数字的数字作为数组

时间:2012-02-04 09:51:21

标签: javascript arrays

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.谢谢

7 个答案:

答案 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
*/