1.题目
2.n的二进制表示中,第k位是几?
先把第k位移动到最后一位(n>>k),然后看最后一位是什么(x&1)
n >> k & 1
3.lowbit(x)运算
返回x二进制表示的最后一位1
x & -x
4.思路
利用lowbit运算,每次减去最后一位1,直到减完为止
#include <bits/stdc++.h> using namespace std; int lowbit(int x) { return x & -x; } int main() { int n; cin>>n; for(int i=0;i<n;i++) { int x,res=0; scanf("%d",&x); while(x) x-=lowbit(x),res++; //每次减去二进制位最后一位1 cout<<res<<' '; } return 0; }