Javascript-使用数组添加整数
我使用数组来计算2的大幂。数组相互相加,并计算进位和循环n-1次,直到我以数字作为数组结束。我这样做是为了避免JavaScript的15位限制 当我达到n=42时,一切正常,进位开始被忽略,数字没有减少,从而产生错误的答案 我尝试将while循环中处理进位的方法从基本加法改为整数除法和模 听起来很愚蠢,但我添加了一个额外的循环来检查是否有任何元素大于10,但它没有找到它们Javascript-使用数组添加整数,javascript,arrays,Javascript,Arrays,我使用数组来计算2的大幂。数组相互相加,并计算进位和循环n-1次,直到我以数字作为数组结束。我这样做是为了避免JavaScript的15位限制 当我达到n=42时,一切正常,进位开始被忽略,数字没有减少,从而产生错误的答案 我尝试将while循环中处理进位的方法从基本加法改为整数除法和模 听起来很愚蠢,但我添加了一个额外的循环来检查是否有任何元素大于10,但它没有找到它们 for (var n = 1; n <= 100; n++) { for (var i = 0, x =
for (var n = 1; n <= 100; n++) {
for (var i = 0, x = [2]; i < n - 1; i++) { // Loop for amount of times to multiply
x.unshift(0)
for (var j = x.length - 1; j > 0; j--) { // Double each element of the array
x[j] += x[j]
}
for (j = x.length - 1; x[j] > 0; j--) { // Check if element >= 10 and carry
while (x[j] >= 10) {
x[j - 1] += Math.floor(x[j] / 10)
x[j] = x[j] % 10
}
}
if (x[0] === 0) {
x.shift()
}
}
console.log('N: ' + n + ' Array: ' + x)
}
但从n=42开始,会出现如下错误:
N: 42 Array: 4,2,18,18,0,4,6,5,1,1,1,0,4
N: 43 Array: 8,4,36,36,0,8,12,10,2,2,2,0,8
N: 44 Array: 1,7,5,9,2,1,8,6,0,4,4,4,1,6
N: 45 Array: 2,14,10,18,4,2,16,12,0,8,8,8,3,2
N: 46 Array: 7,0,3,6,8,7,4,4,1,7,7,6,6,4
N: 47 Array: 14,0,7,3,7,4,8,8,3,5,5,3,2,8
什么错误会像这样抛出它?我认为代码不工作的原因是j=x.length-1的这一行;x[j]>0;j-{//检查元素>=10和进位,您不想检查x[j]>0,但检查j>0 还有您的第二个循环:对于var i=0,x=[2];i
let x = [2] // starting point
for (var n = 1; n <= 100; n++) {
x = [0, ...x].map(n => n * 2)
for (j = x.length - 1; j > 0; j--) {
if (x[j] >= 10) {
x[j - 1] += 1
x[j] %= 10
}
}
if (x[0] === 0) {
x = x.slice(1)
}
console.log('N: ' + n + ' Array: ' + x)
}
如果你想要的只是2的大幂,为什么还要用列表来计算呢?这不是完全一样的吗:
function BigPow2(x, acc=2.0) {
//document.writeln(acc);
acc = acc >= 5 ? acc / 5 : acc * 2;
return x <= 1 ? acc : BigPow2(x-1, acc);
}
或者可选地,使用BigItn.< /P>你应该真正考虑使用。它现在使用了一个后缀N在数字文字上有原生的支持。甚至不知道存在。谢谢。尽管你应该使用BigIt,就像你的算法一样,你不应该检查内部for for j>0而不是x[j]吗?>0?第8行您也可以尝试调试。代码过于复杂,无法理解并在我脑海中逐步查找更大的数字。调试它您应该会在一秒钟内发现问题,但无论如何,必须有更好的方法来计算,而不必使用列表。
function BigPow2(x, acc=2.0) {
//document.writeln(acc);
acc = acc >= 5 ? acc / 5 : acc * 2;
return x <= 1 ? acc : BigPow2(x-1, acc);
}