题目:给定正整数n,求解n的二进制表示中所包含的1的个数。
分析:此题解法很多,这里只写一种效率较高的算法,它的时间负责度是O(m),m是n的二进制表示中所含1的个数。可以利用如下特点:假如n是正整数,则n&(n-1)能把n的二进制表示中最右侧的那个1消除。
解决方案:根据分析中所提到的特性,假设n的二进制表示中含有m个1,则只需要进行m次n=n&(n-1)即可得到0.
以下是此方法的C语言实现:
#include
int calculate_the_zero_number(int n) //计算正整数n的二进制表示中所含1的个数
{
int number=0;
while(n)
{
n=n&(n-1);
number++;
}
return number;
}
int main()
{
int n,number_of_zero_at_rear_of_the_binary_form;
printf("please input the number:\n");
scanf("%d",&n);
number_of_zero_at_rear_of_the_binary_form=calculate_the_zero_number(n);
printf("the zero number at the rear of the binary form of %d is %d\n",n,
number_of_zero_at_rear_of_the_binary_form);
return 0;
}