Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C如何计算长变量中0的最长连续序列的长度?_C_While Loop_Binary_Numbers_Long Integer - Fatal编程技术网

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

C如何计算长变量中0的最长连续序列的长度?,c,while-loop,binary,numbers,long-integer,C,While Loop,Binary,Numbers,Long Integer,我有一个简单的函数,它计算长变量中有多少个0,其中是某个正整数值的二进制表示。但我需要实现一个新特性,它将返回0的最长连续序列的长度 用于0计数的函数: int nullSeq(long binn) { int count=0; if(binn==0) return 1; while(binn!=0) { if ((binn & 1) == 0) { count++;

我有一个简单的函数,它计算长变量中有多少个0,其中是某个正整数值的二进制表示。但我需要实现一个新特性,它将返回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。到目前为止,我不自觉地将所有零的值用作最长序列。它对一些数字有效。但我需要实现一个新函数,它将找到最长的零序

实际上,您正在计算找到的零的总数。找到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;
}

好吧,你为什么不试试呢?我认为你可以使用你已经拥有的基本结构。我认为您需要添加两个变量,一个用于计算当前可见的零的数量,另一个用于跟踪看到的最长序列。你只需要决定当
(binn&1)
为真时该做什么,当它为假时该做什么。@DavidSchwartz说得对。实际上,我将把
count>maxcount
复选框移到“0”案例中来说明这一点。