给定整数的2-adic数

时间:2011-09-30 09:20:03

标签: c++ binary

我正在阅读关于二进制递归Gcd算法的部分,其中给出了该定义 让v_2(a)表示a的2-adic估值,即a的二进制表示的最不重要位中的连续零的数量,所以我试图找到v_2(a)这里是这个代码

#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,出了什么问题?请帮帮我

1 个答案:

答案 0 :(得分:3)

由于您在达到total++时正在运行k==1,因此您已经太晚了。

if (k==1)行之后移动k=n%2;块。

注意:实际上不需要k变量。您可以将循环简化为:

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