AcWing 801. 二进制中1的个数
原题链接
简单
作者:
minux
,
2020-04-22 08:55:07
,
所有人可见
,
阅读 964
解法1:调用__builtin_popcount(unsigned int x)
接口
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int a[N];
int n;
int main(){
memset(a, 0x00, sizeof a);
cin>>n;
for(int i=0; i<n; ++i) cin>>a[i];
for(int i=0; i<n; ++i) cout<<__builtin_popcount(a[i])<<" ";
return 0;
}
解法2:lowbit(unsigned int x)
操作
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int a[N];
int n;
// 每次减去lowbit(x), 计算减了多少次即x含有多少个1
int lowbit(int x){
return x&-x;
}
int main(){
memset(a, 0x00, sizeof a);
cin>>n;
for(int i=0; i<n; ++i) cin>>a[i];
for(int i=0; i<n; ++i){
int res=0;
while(a[i]) a[i]-=lowbit(a[i]), res++;
cout<<res<<" ";
}
return 0;
}