算法思想:lowbit(x)的实现就是x与-x做&运算。数a的负数的二进制表示是取反再加1,a&(-a)即等于a&(~a+1),就等于a的最后一位。
#include
#include
#include
#include
using namespace std;
const int N=1e5;
int q[N];
int lowbit(int x){
return x&-x;
}
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++) cin>>q[i];
for(int i=0;i<n;i++){
int res=0;
while(q[i]){ //直到当前处理的这个数为0时,跳出循环。
q[i]-=lowbit(q[i]); //每次都利用lowbit减去最低位的那个1
res++; //每减去1个1都要计数。
}
printf("%d ",res);
}
return 0;
}