二进制中1的个数
输入样例
5
1 2 3 4 5
输出样例
1 1 2 1 2
lowbit函数(利用负整数的补码特性)
代码
#include<iostream>
#include<algorithm>
using namespace std;
int lowbit(int x)//每次返回x的最后一位1
{
return x & (-x);// -x=~x+1
}
int main()
{
int n, x;
cin >> n;
for (int i = 0; i < n; i++)
{
scanf("%d", &x);
int sum = 0;
while (x != 0)
{
x -= lowbit(x);//将x的最后一位1减掉,减了几次就有几个1
sum++;
}
cout << sum << ' ';
}
return 0;
}