二进制中1的个数

给定一个长度为 n 的数列,请你求出数列中每个数的二进制表示中 11 的个数。

输入格式

第一行包含整数 n。

第二行包含 n 个整数,表示整个数列。

输出格式

共一行,包含 n 个整数,其中的第 i 个数表示数列中的第 i 个数的二进制表示中 11 的个数。

数据范围

1≤n≤1000001,
0≤数列中元素的值≤1090≤数列中元素的值≤109

输入样例:

1
2
5
1 2 3 4 5

输出样例:

1
1 1 2 1 2

将十进制数与1后右移1位直到十进制数为0可以实现十进制转二进制。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<iostream>
#include<vector>
using namespace std;

int main(){
int n;
cin>>n;
vector<int> a(n+1);
vector<int> res;
for(int i=0;i<n;i++) cin>>a[i];
for(int i:a){
int count=0;
while(i){
count+=i&1;
i>>=1;
}
res.push_back(count);
}
for(int i=0;i<n;i++) cout<<res[i]<<" ";
return 0;
}