我正在阅读关于二进制递归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,出了什么问题?请帮帮我
答案 0 :(得分:3)
由于您在达到total++
时正在运行k==1
,因此您已经太晚了。
在if (k==1)
行之后移动k=n%2;
块。
注意:实际上不需要k
变量。您可以将循环简化为:
while((n%2)==0) {
n>>=1;
total++;
}