如何在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个计数丢失。

07-24 19:36