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