2015-10-05 54 views
0

我正在嘗試編寫代碼來計算在達到1之前整數可以除以2的次數。 當我運行我的代碼時,它會提示我輸入一個數字,就像你在下面的代碼中看到的那樣,但是一旦我這樣做了,什麼都不會發生,只會出現一個空行。有誰知道我做錯了什麼?在達到1之前數字可以除以2的次數#

#include<iostream> 
Using namespace std; 
int main() 
{ 

    float x,i=0,num=0; 

    cout<<"please enter num:"; 
    cin>>x; 
    while(x>0) 
     { 
      if(x/2>1) 
       num+=i; 
       i++; 
     } 

        cout<<"Number of times "<<x<<"is divisible by 2 is:"<<num<<endl; 

    return 0; 
}  
+2

提示:你的循環依賴於x'的'值。你在哪裏修改'x'的值? – molbdnilo

+0

你只需要數字n,其中x <= 2^n(使用數學) –

回答

1

有TWP問題:

1)你永遠不更新X,所以你會遍歷很長一段時間。

2)x/2> 1即使x不能被2整除。考慮使用模數爲測試

例如:

... 
while(x>1 && fmod(x,2)==0) // sorry % is for integers only 
{ 
    num++; 
    x /= 2; 
} 
+0

好吧,你解釋得比我好多了。刪除我的答案,對這個問題進行投票 –

+0

#include #include using namespace std; int main() { int x,i = 1; cout <<「請輸入num:」; cin >> x; (x/2!= 1) x = x/2; i ++; } cout <<「可被2整除的次數是:」<< x << endl; return 0; } 其實W¯¯母雞我使用模在多年平均值的工作,但是當我用「/」它做的工作,但我沒有得到正確的答案,雖然:(可以請你檢查一下 x值即使現在已更新:/ – Umme

相關問題