众所周知 1 换算成二进制数是 0001 也就是只有第一位为1

那么任何数n跟1做与操作 n&1 如果该数的二进制数第一位为1则结果为1 如果其第一位不为1则结果为0.

举例:

5 & 1

101 & 001 = 001

4 & 1

100 & 001 = 000

那么知道这一点之后 我们只需要计算完当前情况后对n进行右移一位然后再进行计算即可

5>>1 & 1

010 & 001 = 000

4>>1 & 1

010 & 001 = 000

依次类推直到把该数n右移到没法右移即n=0时退出循环即可

此时 我们需要定义一个count统计其与操作之后结果为1的次数

我们不需要进行任何判断 只需要将count和与操作过后的结果相加即可,如果与结果为1则count+=1 如果结果为0则count+=0

另外,因为有多组输入所以我们需要写在一个while循环中 循环条件为scanner.hasNext()

具体代码如下:

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            int n = sc.nextInt();
            int count = 0;
            while(n != 0){
                count += n & 1 ;
                n >>= 1;
            }
            System.out.println(count);
        }
    }
}