数的补码——二进制取反+1
正码0....0100101
反码1....1011010
补码1....1011011
lowbit()函数:返回二进制中第一个1的位置,如:101100,返回(100)2=4
int lowbit(int a){
return a&(-a);
} 每次减掉第一个1就可以得到一个数二进制中1 的个数 #include <bits/stdc++.h>
using namespace std;
int n,a;
int lowbit(int a){
return a&(-a);
}
int solve(int a){
int ans=0;
while(a){
a-=lowbit(a);//每次减掉二进制中第一个1
ans++;
}
return ans;
}
int main(int argc, char** argv) {
cin>>n;
for(int i=0;i<n;i++){
scanf("%d",&a);
cout<<solve(a)<<" ";
}
return 0;
} 
京公网安备 11010502036488号