AcWing 801. 二进制中1的个数

AcWing 801. 二进制中1的个数 - 糖豆爸爸 - 博客园
第一讲 基础算法 - 07 位运算 | Akari的小站


AcWing 801. 二进制中1的个数 [简单]

1 题目描述

给定一个长度为 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

2 AC代码

运用模板. 即利用 x & -x

#include <iostream>
using namespace std;

int lowbit(int x){ // 返回末尾的1
return x & -x;
}

int main()
{
int n;
cin >> n;

while (n -- )
{
int x;
cin >> x;

int count = 0;
while (x) x -= lowbit(x), count ++ ; // 每次减去 x 的最后一位

cout << count << " ";
}

return 0;
}

3 扩展 *

看这位大佬就可以…… tql.

AcWing 801. 二进制中1的个数 - 糖豆爸爸 - 博客园

  • x & (−x):保留二进制下最后出现的 1 的位置,其余位置置 0
  • x & (x−1):消除二进制下最后出现的 1 的位置,其余保持不变