Javascript 将数字的位数用作数组 var编号=342345820139586830203845861938475676 变量输出=[] var总和=0; while(数字){ 输出。推送(编号%10); 数字=数学楼层(数字/10); } output=output.reverse(); 函数addTerms(){ 对于(i=0;i

Javascript 将数字的位数用作数组 var编号=342345820139586830203845861938475676 变量输出=[] var总和=0; while(数字){ 输出。推送(编号%10); 数字=数学楼层(数字/10); } output=output.reverse(); 函数addTerms(){ 对于(i=0;i,javascript,arrays,Javascript,Arrays,我试着把那个大数字分成几个数字。然后,求出第一位提升到第二位的幂的和,第三位提升到第四位,第五位提升到第六位,依此类推。由于某种原因,我的数组返回了奇怪的数字,导致我的和被关闭。正确答案是2517052。谢谢您在JavaScript中遇到了精度问题。在开始做任何事情之前,只需计算number的当前值,结果可能会让您感到惊讶: var number = 342345820139586830203845861938475676 var output = [] var sum = 0; while

我试着把那个大数字分成几个数字。然后,求出第一位提升到第二位的幂的和,第三位提升到第四位,第五位提升到第六位,依此类推。由于某种原因,我的数组返回了奇怪的数字,导致我的和被关闭。正确答案是2517052。谢谢

您在JavaScript中遇到了精度问题。在开始做任何事情之前,只需计算
number
的当前值,结果可能会让您感到惊讶:

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());
另见:

为了解决您的问题,我会将您的输入号码存储为一个数组(甚至可能是一个字符串),然后从中提取数字

这将解决您的计算,预期结果为2517052:

>>> var number = 342345820139586830203845861938475676; number;
3.423458201395868e+35
var number=“342345820139586830203845861938475676”;
var总和=0;

对于(var i=0;i您在JavaScript中遇到了精度问题。在开始执行任何操作之前,只需评估
number
的当前值,结果可能会让您感到惊讶:

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());
另见:

为了解决您的问题,我会将您的输入号码存储为一个数组(甚至可能是一个字符串),然后从中提取数字

这将解决您的计算,预期结果为2517052:

>>> var number = 342345820139586830203845861938475676; number;
3.423458201395868e+35
var number=“342345820139586830203845861938475676”;
var总和=0;

对于(var i=0;iJavaScript以浮点格式存储数字(通常为
double
)。
double
只能精确存储15位数字


您可以使用字符串来存储这个大数字。

JavaScript以浮点格式存储数字(通常为
double
)。
double
只能精确存储15位数字


您可以使用字符串来存储这个大数字。

将数字转换为字符串,然后进行迭代运算

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;

将数字转换为字符串,然后进行迭代计算

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;

Javascript支持的最大整数是9007199254740992,因此只有您的输出是奇怪的


作为参考,请浏览链接Javascript支持的最大整数是9007199254740992。因此,只有您的输出是奇怪的


如前所述,这是一个数字精度问题。它适用于所有使用本机数字格式的编程语言。如果改用字符串,您的问题可以解决

var number = "342345820139586830203845861938475676";//number definition
var X = 0;//some iterator
var numberAtX = 0 + number.charAt(X);//number access

(结果是2517052,顺便说一句!)

如前所述,这是一个数字精度问题。它适用于所有使用本机数字格式的编程语言。如果改用字符串,问题就解决了

var number = "342345820139586830203845861938475676";//number definition
var X = 0;//some iterator
var numberAtX = 0 + number.charAt(X);//number access

(结果是2517052,顺便说一句!)

[edit]根据评论调整了答案

嗯,我想结果应该是2517052。我想这也是一样的:

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

[edit]根据评论调整了答案

嗯,我想结果应该是2517052。我想这也是一样的:

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

现代浏览器支持数组方法map和reduce, 并且可能值得在旧浏览器中定义。这是一个很好的机会, 如果你以前没用过

如果要生成字符串数组, 匹配数字对,而不是拆分为单个数字。 本例采用数字或字符串

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

现代浏览器支持数组方法map和reduce, 并且可能值得在旧浏览器中定义。这是一个很好的机会, 如果你以前没用过

如果要生成字符串数组, 匹配数字对,而不是拆分为单个数字。 本例采用数字或字符串

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

请参阅,这并不能克服Javascript不能表示36位数字的问题。在代码中,数字将等于字符串“3.423458201395868e+35”(取决于平台)这没有多大用处。事实上,它确实会首先呈现一个数字,简单的更改是用引号将整个数字括起来。编辑以显示。这并不能克服Javascript不能表示36位数字的问题。在代码中,数字将等于字符串“3.423458201395868e+35”(取决于平台)这没有多大用处。事实上,它确实首先呈现一个数字,简单的改变是用引号将整个数字括起来。编辑以显示。您一次只从字符串中移动一个数字,生成3^4+4^2+2^3+3^4等。OP想要3^4+2^3+4^5+8^2等。您是对的,错过了。调整了答案。基本上是一样的解决方案作为您的答案,在
循环中稍作调整,而
循环时,您一次只从字符串中移动一位数字,产生3^4+4^2+2^3+3^4等。OP想要3^4+2^3+4^5+8^2等。您是对的,错过了。调整了答案。它基本上与您的答案相同,只是在
w中稍作调整hile
Loop使用方括号对字符串的字符访问不兼容跨浏览器。您应该使用charAt()对使用方括号的字符串的字符访问不兼容跨浏览器。您应该使用charAt()