用java 解决这个问题给定两个整数 a,b 。 请你计算,在 [a,b] 范围内有多少个整数满足其二进制表示恰好有一个 0 。 不考虑前导 0 。 例如,当 a=5,b=10 时,[5,10] 范围内的所有整数及其二进制表示如下: 510=1012,610=1102,710=1112,810=10002,910=10012,1010=10102 可以看出,只有 5 和 6 满足二进制表示恰好有一个 0 。 输入格式 共一行,两个整数 a,b 。 输出格式 一个整数,表示满足条件的整数数量。
时间: 2024-02-12 14:09:11 浏览: 247
可以按照以下步骤解决这个问题:
1. 遍历从 a 到 b 的每个整数,对于每个整数转换为二进制数,统计其中 0 的个数。
2. 如果 0 的个数等于 1,则满足条件,计数器加 1。
3. 遍历完所有整数后,返回计数器的值。
具体实现可以参考以下代码:
```java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int a = input.nextInt();
int b = input.nextInt();
int count = 0;
for (int i = a; i <= b; i++) {
String binary = Integer.toBinaryString(i);
int zeroCount = 0;
for (int j = 0; j < binary.length(); j++) {
if (binary.charAt(j) == '0') {
zeroCount++;
}
}
if (zeroCount == 1) {
count++;
}
}
System.out.println(count);
}
}
```
注意,题目要求不考虑前导 0,因此在转换为二进制数后需要去掉前导 0。
阅读全文