方法一
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)); } }