HJ62 查找输入整数二进制中 1 的个数
描述
输入一个正整数,计算它在二进制下的 1 的个数。
注意多组输入输出!!!!!!
数据范围: 1≤n≤231−1 1≤n≤231−1
输入描述:
输入一个整数
输出描述:
计算整数二进制中 1 的个数
示例 1
输入:
5
输出:
2
说明:
5 的二进制表示是 101,有 2 个 1
示例 2
输入:
0
输出:
0
题解
位运算
import java.util.Scanner;
public class Main {
public static void main(String [] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int a = sc.nextInt();
int count = 0;
while (a != 0) {
// a = a&(a-1);
// count++;
if (a % 2 == 1) {
count++;
}
a = a >> 1;
}
System.out.println(count);
}
}
}
暴力
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNext()) { // 注意 while 处理多个 case
int a = in.nextInt();
// 输入一个正整数,计算它在二进制下的1的个数。
String b = Integer.toBinaryString(a);
int res = 0;
for (char c : b.toCharArray()) {
if (c == '1') {
res++;
}
}
System.out.println(res);
}
}
}
替换
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextInt()) { // 注意 while 处理多个 case
int a = in.nextInt();
String b = Integer.toBinaryString(a);
String c = b.replaceAll("1", "");
System.out.println(b.length() - c.length());
}
}
}