【发布时间】:2019-03-14 20:02:12
【问题描述】:
我的问题陈述:
正整数 N 中的二进制间隙是在 N 的二进制表示中两端被 1 包围的连续零的任何最大序列。例如,数字 9 的二进制表示为 1001,包含长度为 2 的二进制间隙. 数字 529 具有二进制表示 1000010001 并包含两个二进制间隙:一个长度为 4 和一个长度为 3。数字 20 具有二进制表示 10100 并包含一个长度为 1 的二进制间隙。数字 15 具有二进制表示 1111 并且没有二进制间隙。数字 32 具有二进制表示 100000 并且没有二进制间隙。
我的代码:
public class Abc {
static void decToBinary(int n) {
int[] binaryNum = new int[1000];
// counter for binary array
int i = 0;
while (n > 0) {
// storing remainder in binary array
binaryNum[i] = n % 2;
n = n / 2;
i++;
}
int ctr = 0, k = 0;
ArrayList<Integer> al = new ArrayList<Integer>();
// printing binary array in reverse order
for (int j = i - 1; j >= 0; j--) {
System.out.print(binaryNum[j]);
if (binaryNum[j] == 0) {
k = j;
do {
ctr++;
k++;
} while (binaryNum[k] == 0);
al.add(ctr);
ctr = 0;
}
}
for (int ii = 0; ii < al.size(); ii++) {
System.out.println(al.get(ii));
}
}
// driver program
public static void main(String[] args) {
int n = 1041;
decToBinary(n);
}
}
我正在尝试显示存储在我的 ArrayList 中的二进制间隙的输出。但是对于给定的输入 1041,输出是完全不同的。我不知道它为什么要存储 1、2、3、4;根据我的逻辑,在输入:1041 的情况下,它应该只存储间隙值 5 和 3,即使 5 和 3 也存储在 ArrayList 中但在其他一些索引中。
我认为 do-while 循环中存在问题,尤其是在 al.add(ctr) 中,但我还没有弄清楚。
【问题讨论】:
-
代码应该做什么? “问题陈述”没有定义任何行为,它只定义了“二进制间隙”是什么。 if 的任务是否存在二元差距?二进制间隙的数量? 最长二元间隙?最长二进制间隙的长度?还有什么?
-
@Bohemian 我认为你没有仔细阅读声明并运行代码。
-
问题不清楚。问题陈述说明了什么 差距是什么,但没有说明找到的差距做什么。如果您不知道它应该做什么,那么该代码是无关紧要的。顺便说一句,可能有一个 1 行解决方案。
-
问题陈述中的什么地方说要打印任何东西?事实上,问题陈述并没有说要做什么,它只是定义了什么二元间隙是什么,而不是当你找到一个时要做什么。
-
@makoto 哎呀——我是想问 Ameeq