2011-06-15 166 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()