C Как я могу посчитать длину самой длинной непрерывной последовательности 0 с длинной переменной? - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть простая функция, которая подсчитывает, сколько нулей в длинной переменной, где это двоичное представление некоторого положительного целого значения. Но мне нужно реализовать новую функцию, которая будет возвращать длину самой длинной непрерывной последовательности 0 с ...

Функция для отсчета 0 с:

int nullSeq(long binn)
{
    int count=0;

    if(binn==0)
        return 1;

    while(binn!=0)
    {
        if ((binn & 1) == 0)
        {
            count++;
        }
        binn=binn >> 1;
    }

    return count;
}

F.e. число 559. Бинарное представление числа 559 равно 1000101111. Функция отсчета 0 вернет 4. Самая длинная непрерывная последовательность нулей должна быть 3. До сих пор я неосознанно использовал значение всех нулей как самую длинную последовательность. Это работало для некоторых номеров. Но мне нужно реализовать новую функцию, которая найдет самую длинную нулевую последовательность.

1 Ответ

0 голосов
/ 07 ноября 2018

Вы на самом деле подсчитываете общее количество нулей, которое вы найдете. Вам нужно увеличить счетчик, когда вы найдете 0, и установить счетчик на 0, когда вы найдете 1, и вы должны отслеживать наибольшее значение счетчика.

int nullSeq(long binn)
{
    int count=0, maxcount=0;

    if(binn==0) {
        return 1;
    }

    while(binn!=0) {
        if ((binn & 1) == 0) {
            count++;
            if (count > maxcount) {
                maxcount = count;
            }
        } else {
            count = 0;
        }
        binn=binn >> 1;
    }
    return maxcount;
}
...