第一种方法:位操作,这种操作的复杂度是二进制的位数:
#include<iostream.h>
main()
{
unsigned int a;
cin>>a;
int count=0;
int num=0;
while(count<8)
{
if(a&1==1)
{
num++;
}
a>>=1;
count++;
}
cout<<num<<endl;
}
第二中方法:时间复杂度只与1的个数有关:
#include<iostream.h>
main()
{
unsigned int a;
cin>>a;
int count=0;
int num=0;
while(a)
{
a&=a-1;
num++;
}
cout<<num<<endl;
}