方法一
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
long x=in.nextLong();
int sum=0;
while(x>0){
sum+=x%2;
x=x/2;
}
System.out.println(sum);
}
}
优化,使用位运行
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
long x=in.nextLong();
int sum=0;
while(x>0){
sum+=x&1;
x=x>>1;
}
System.out.println(sum);
}
}
方法二 Brian Kernighan 算法
import java.util.Scanner;
//Brian Kernighan 算法
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
long x=in.nextLong();
int sum=0;
while(x>0){
x&=x-1;//将x二进制表示中最右边的那个 1(即最低位的 1)置为 0
sum++;
}
System.out.println(sum);
}
}
方法三 使用API
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
long x=in.nextLong();
System.out.println(Long.bitCount(x));
}
}

京公网安备 11010502036488号