#include
int solve(int n)
{
int ans=0;
while(n)
ans+=n&1,n>>=1;
return ans;
}
int main()
{
int n;
scanf("%d",&n);
printf("%d的二进制数有%d个1。\n",n,solve(n));
return 0;
}
第一种方法:简单的运算一个整数中二进制中1的个数,位运算用了&和>>符号,即与和右移。时间复杂度为log2(n)。
#include
int solve(int n)
{
int ans=0;
while(n)
ans++,n&=(n-1);
return ans;
}
int main()
{
int n;
scanf("%d",&n);
printf("%d的二进制数有%d个1。\n",n,solve(n));
return 0;
}
第二种方法:通过不断的去掉二进制中最右端的1,来计算整数二进制中1的个数,时间复杂度和二进制中1的个数有关。