zl程序教程

您现在的位置是:首页 >  其他

当前栏目

801. 二进制中1的个数

二进制 个数
2023-09-14 09:01:25 时间

文章目录

Question

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

输入格式
第一行包含整数 n。

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

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

数据范围
1≤n≤100000,
0≤数列中元素的值≤109
输入样例:
5
1 2 3 4 5
输出样例:
1 1 2 1 2

Ideas

n -= lowbit(n)

Code

#include <iostream>

using namespace std;

int lowbit(int x)
{
    return x & -x;
}
// 10的9次方小于int能表示的最大数
// 思路为 n -= lowbit(n) 直到 n 等于 0 
int main()
{
    int n;
    cin >> n;
    int a;
    while(n --)
    {
        cin >> a;
        int res = 0;
        
        while(a) 
        {
            cout << a << ' ' << lowbit(a) << endl;
            a -= lowbit(a);
            res ++;
        }
        // cout << res << ' ';
    }
    
    return 0;
    
}