题目链接
介绍一下\(lowbit\)函数
\(lowbit(x)是x的二进制表达式中最低位的1所对应的值\)
比如\(9\)的二进制为\(1001\),\(8\)的二进制是\(1000\)
\(lowbit(9)\)就是\(2^{0} = 1\)
\(lowbit(8)\)就是\(2^{3} = 8\)
那么这道题就简单了
求\(9\)的二进制有几个\(1\),就可以用\(9\)先减去\(lowbit(9)\),再减去\(lowbit(9)\),直到\(9<=0\)为止
中间减了几次就是答案
#include <bits/stdc++.h>
using namespace std;
int n, x, cnt;
int lowbit(int x) { return x & (-x); }
int main() {
scanf("%d", &n);
while (n--) {
scanf("%d", &x), cnt = 0;
while (x) x -= lowbit(x), ++cnt;
printf("%d ", cnt);
}
return 0;
}