先講解幾個位運算的知識
1、二進制中第k位是幾?
2、lowbit(x)
3、lowbit實現方法(注意:~x+1就是-x)
下面我們進入正題:
給定一個長度為 n 的數列,請你求出數列中每個數的二進制表示中 1的個數。
輸入格式
第一行包含整數 n。
第二行包含 n個整數,表示整個數列。
輸出格式
共一行,包含 n個整數,其中的第 i 個數表示數列中的第 i 個數的二進制表示中 1的個數。
數據范圍
1≤n≤100000,
0≤數列中元素的值≤10^9
輸入樣例:
5
1 2 3 4 5
輸出樣例:
1 1 2 1 2
#include <iostream> using namespace std; int main() { int n; scanf("%d", &n); while (n -- ) { int x, s = 0; scanf("%d", &x); for (int i = x; i; i -= i & -i) s ++ ; printf("%d ", s); } return 0; }