801. 二进制中1的个数

84 阅读1分钟

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

Question

Content

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

输入格式

第一行包含整数 n。

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

输出格式

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

数据范围

1 ≤ n ≤ 100000,

0 ≤ 数列中元素的值 ≤ 109

输入样例:

5
1 2 3 4 5

输出样例:

1 1 2 1 2

Solution

Java

import java.util.Arrays;
import java.util.Scanner;
import java.util.stream.IntStream;

public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[] arr = IntStream.range(0, n)
                .map(e -> scanner.nextInt()).toArray();
        Arrays.stream(arr).forEach(e -> {
                    int countDigitalOne = countDigitalOne(e);
                    System.out.print(countDigitalOne + " ");
                }
        );
    }

    private static int countDigitalOne(int n) {
        int count = 0;
        for (int i = n; i != 0; i -= (i & -i)) {
            count++;
        }
        return count;
    }
    
}