2011-06-15 55 views
2
// CALCULATE 2^10 
    var base = 2; 
    var power = 0; 
    var answer = 1; 

    while (power < 10) 
    { 
     answer = base * 2; 
     power = power + 1; 
    } 

    alert(answer); 

为什么没有这个产品1024?它打印4计算2^10

回答

4

这是因为base * 2将永远是4

我相信这条线:

answer = base * 2; 

应该是

answer = answer * base; 
+1

+1来自我。 @industrian:这就是你的代码不工作的原因。 – 2011-06-15 18:04:41

-1

哟应该这样做

var base = 2; 
var power = 0; 
var answer = 1; 
while (power < 10) 
{ 
    answer = answer * 2; 
    power = power + 1; 
} 

alert(answer); 

你必须增加答案,否则它将始终具有相同的值

+0

真的吗?重读这 – 2011-06-15 18:02:02

+0

'1 + 1 * 2' - >'3 + 1 * 2' - >'5 + 1 * 2'等...尝试'回答* = 2'来代替。 – 2011-06-15 18:03:24

+0

对不起,我很困惑。 – JAiro 2011-06-15 18:05:28

4

这并没有真正回答你的问题(至于为什么产生错误值),但你可以使用Math.pow计算结果:

alert(Math.pow(2, 10)); 
+0

是的,你可以,除了我正在阅读一本书的练习,我们还没有到那里。确切的话是'使用你迄今为止学到的东西'...谢谢你回答(并修改你的答案)。 – industan 2011-06-15 18:03:18

2

因为answer = base * 2;每次迭代。由于base永远不会改变,每一次迭代你正在做answer = 2 * 2;

见你应该是做什么其他的答案。

2

这是因为无论你有多少个循环周期做什么,你总是(2)乘以2基地和结果分配给answer变量。所以,无论是一个或万个碱基,答案永远是4

3

你的逻辑是有缺陷的:

... 
answer = base * 2; 
... 

这解析为answer = 2 * 2,不管你有多少次递增循环。 base不会更改。

1

您需要保存的结果各oparation的,就像这样:

var base = 2; 
    var power = 1; 
    var answer = 1; 

    answer = base; 

    while (power < 10) { 
     answer = answer * base; 
     power = power + 1; 
    } 

    alert(answer); 

这可以帮助您?

+0

在循环之前,我使用answer = base来定义base^1,然后将它乘以2,但再次以base为基数,因此您的脚本可以使用不同的基数。 – 2011-06-15 18:14:21

1

如果这是功课...一个动态规划的解决方案当你进入递归和其他有趣的东西,这将有助于:

该解决方案是在计算方面日志(Y)。

function powers(x,y) { 
     if(y == 0) { 
       return 1; 
     } else if(y == 1) { 
       return x; 
     } else if(y == 2) { 
       return x*x; 
     } else if(y%2==0) { 
       var a = powers(x,y/2); 
       return a * a; 
     } else { 
       var pow = y-1; 
       var a = powers(x,pow/2); 
       return x * a * a; 
     } 
} 

如果不使用Math.pow()