二进制中1的个数

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

输入格式

题目描述

第一行包含整数 n

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

输出格式

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

数据范围

1≤n≤100000,
010^9

输入样例:

5
1 2 3 4 5

输出样例:

1 1 2 1 2

示例答案

#include<iostream>

using namespace std;

int main()
{
    int n;
    cin >> n;
    int m;
    while (n--)
    {
        cin >> m;
        int c = 0;
        for (int i = m; i; i -= i & -i) c++;

        cout << c << " ";
    }

    return 0;
}

解释

求n的第k位数字: n >> k & 1
返回n的最后一位1:lowbit(n) = n & -n

posted @ 2021-12-24 18:47  ora12321  阅读(6)  评论(0)    收藏  举报