原题链接:
https://www.acwing.com/problem/content/803/https://www.acwing.com/problem/content/803/这里运用的是lowbit操作
对一个数进行lowbit操作就是返回第一的“1” 的位置
例如 当n=15=(1010)
则lowbit(n)=10;lowbit(101000)=1000;
所以我们只需要在n不等于零的情况下,对n一直进行lowbit操作,每次让n减去lowbit(n)的值,就相当于去除了n二进制表示中的“1”
进行了多少次lowbit操作,就有多少个“1”;
#include <bits/stdc++.h>
using namespace std;
int lowbit (int x)
{
return x&-x;
}
int main ()
{
int n;cin >> n;
while(n--){
int x;
cin >> x;
int sum=0;
while(x){
x-=lowbit(x);
sum++;
}
cout << sum << " ";
}
return 0;
}