C如何计算long变量中最长连续序列0s的长度?

时间:2018-11-07 20:28:18

标签: c while-loop binary numbers long-integer

我有一个简单的函数,可以计算长变量中有多少个0,其中一些正整数的二进制表示形式。但是我需要实现一个新功能,该功能将返回最长连续序列0s的长度...

计数为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 :(得分:3)

您实际上是在计算找到的零的总数。找到0时需要增加计数器,找到1时需要将计数器设置为0,并且必须跟踪计数器的最大值。

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;
}