众所周知 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);
}
}
}