如何在Java中从二进制数算出最大连续1?
例如,用户输入的整数(如13)应为二进制1101。
二进制数1101具有2个连续的1,因此输出应为2。
另一个示例,数字5将在二进制0101中,因此输出应为1。如果输入数字439,则我的程序无法正常工作。
Scanner scanner = new Scanner(System.in);
int numb = scanner.nextInt();
int tempCount = 0;
int count = 0;
// numb = 439 -> output 3
// numb = 13 -> output 2
// numb = 1 -> output 1
while (numb >= 1) {
if (numb % 2 != 0) {
tempCount++;
numb /= 2;
count = tempCount;
if (numb % 2 != 0) {
tempCount++;
count = tempCount;
numb /= 2;
}
}
else {
numb /= 2;
tempCount = 0;
}
}
System.out.println(count);
最佳答案
我相信您打算将count
设为最长序列1s的长度,而tempCount
则是当前计数序列中1s的数目。因此,仅当tempCount
大于count
时,才应为其分配count
。对于439,我相信您正确地计算了三个1。然后是0,您将tempCount
正确重置为零。下次计算1时,请将正确的tempCount
递增为1,然后再将其分配给count
,这会使您的3个计数丢失。