2011-09-30 37 views
0

我正在閱讀有關二元遞歸GCD算法的部分,其中定義如下給出 讓v_2(a)表示a的2-adic估值,即至少連續0的數目的二進制表示的顯着性位,所以我試圖找到V_2(一)下面是該給定整數的2位數

#include <iostream> 
using namespace std; 
int main() 
{ 
    int total=0; 
    int n,k; 
    cout << "enter value n "; 
    k=0; 
    cin >> n; 
    while(k!=1) 
    { 
     if (k==1) 
     { 
      break; 
     } 
     k=n%2; 
     n>>=1; 
     total++; 

    } 
    cout<<total<<" "<<endl; 

    return 0; 
} 

代碼時,我輸入數字12(二進制是1100),它應該給我號碼2,但它顯示3,有什麼不對嗎?請幫我

回答

3

你正在突破,而爲時已晚,因爲你正在運行total++已達到。

k=n%2;行之後移動if (k==1)塊。

注意:k變量實際上並不是必需的。您可以簡化迴路:

while((n%2)==0) { 
    n>>=1; 
    total++; 
}