如题所示,该编程题题意很简单,就是求出一个整数二进制表示中1的个数。比如:5,二进制表示101,所以1的个数就是2。8,二进制表示1000,所以1的个数是1。
如果我们有一种办法能求出整数的二进制,那么1的个数其实就很容易统计了。如下所示的代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()) {
int num = sc.nextInt();
String str = Integer.toBinaryString(num);
str = str.replaceAll("0", "");
System.out.println(str.length());
}
sc.close();
}
}
这里统计1的个数,做了一个取巧,没有一个一个去遍历二进制字符串的每一位,然后统计1的个数,而是通过正则替换将二进制中0替换为空,最后剩下的就都是1,直接计算字符串长度即可。
还有一种办法,并不是一个很直观的办法,他利用二进制的特点,如果二进制的某一位是1,那么通过逻辑与运算可以得到1,比如5二进制表示101:
101 & 1 = 1
10 & 1 = 0
1 & 1 = 1
其实这个演算步骤基本就将算法的核心给出来了:我们计算整数二进制中1的个数,需要先与1,然后向右移动一位(去掉尾部的一位),接着再与1,一直与到数字为0。代码如下:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()) {
int num = sc.nextInt();
int count = 0;
while(num>0) {
if((num&1)==1) {
count++;
}
num >>= 1;
}
System.out.println(count);
}
sc.close();
}
}