题解:AcWing 801 二进制中1的个数

【题目来源】

AcWing:801. 二进制中1的个数 - AcWing题库

【题目描述】

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

【输入】

第一行包含整数 \(n\)

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

【输出】

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

【输入样例】

5
1 2 3 4 5

【输出样例】

1 1 2 1 2

【解题思路】

image

【算法标签】

《AcWing 801 二进制中1的个数》 #位运算#

【代码详解】

#include <bits/stdc++.h>
using namespace std;
int lowbit(int x)
{
    return x & -x;
}
int main()
{
    int n;
    cin >> n;
    while (n--) {
        int x; 
        cin >> x;
        int res = 0;
        while (x) x-=lowbit(x), res++;  //每次减去x的最后一位1
        cout << res << " ";
    }
    return 0;
}

【运行结果】

5
1 2 3 4 5
1 1 2 1 2 
posted @ 2026-02-21 19:13  团爸讲算法  阅读(10)  评论(0)    收藏  举报