学做网站要编程广州有什么好玩的地方适合小朋友
给定一个长度为 n
 的数列,请你求出数列中每个数的二进制表示中 1
 的个数。
输入格式
 第一行包含整数 n
 。
第二行包含 n
 个整数,表示整个数列。
输出格式
 共一行,包含 n
 个整数,其中的第 i
 个数表示数列中的第 i
 个数的二进制表示中 1
 的个数。
数据范围
 1≤n≤100000
 ,
 0≤数列中元素的值≤109
 输入样例:
 5
 1 2 3 4 5
 输出样例:
 1 1 2 1 2
(1)求n的二进制数表示中第k位是几?
 n >> k & 1
 
 (2)lowbit操作:返回x的最后一位1(返回是一个二进制数)
 x & -x
 
 计算过程:
 
#include <iostream>using namespace std;int n;int main ()
{scanf("%d", &n);while(n -- ){int x;scanf("%d", &x);int res = 0;while(x) {if(x & 1) res ++; // 取x最后一位x = x >> 1; // x 右移一位// lowbit写法// x -= (x & -x); // (x & -x) 就是lowbit操作,每次减去最后一个1,然后res++,减了多少次就有多少个1,比上面那种稍微快一点//res ++;}printf("%d ", res);}return 0;
}
