问题描述:
输入一个整数,求它存储在内存中的二进制中1的个数。
问题分析:
方法一:通过 num%2=1; num/=2; count++; 来实现功能。
方法二:通过 for循环,每次右移1位,count++;
方法三:通过 num= num&(num-1);count++; 来实现功能。
源代码:
#include <stdio.h>
#include <stdlib.h>
CountNum1(int n)//方法一
{
int count = 0;
while(n)
{
if(n%2==1)
{
count ++;
}
n/=2;
}
return count;
}
CountNum2(int n)//方法二
{
int i = 0;
int count = 0;
for(i=0;i<32;i++)
{
if(((n>>i)&1) == 1)
{
count++;
}
}
return count;
}
CountNum3(int n)//方法三
{
int i = 0;
int count = 0;
while(n)
{
count++;
n = n & (n-1);
}
return count;
}
int main()
{
int n = 0;
printf("Please enter a number:");
scanf("%d",&n);
int result = CountNum3(n);
printf("二进制中1的个数 = %d",result);
return 0;
}
小结:
解决一个问题可以有很多种算法,只要肯动脑筋,总会想到的。
另外一点就是要多做题,刷题,见的多了,有些东西自然很容易看到。