#include <iostream>
using namespace std;
int main()
{
int N;
cin>>N;
while(N--)
{
int num,remainder,Onenumber=0;
cin>>num;
while(1)
{
remainder=num%2;
if(remainder==1)
Onenumber++;
num=num>>1;
if (num<=1)
{
remainder=num%2;
if(remainder==1)
Onenumber++;
break;
}
}
cout<<Onenumber<<endl;
}
}
历程使用a&b按位与求解:
#include<stdio.h>
int count1(int num)
{
int i=0;
while(num)
{
num&=(num-1);
i++;
}
return i;
}
int main()
{
int n,m;
scanf("%d",&n);
while(n--)
{
scanf("%d",&m);
printf("%d\n",count1(m));
}
}