【问题标题】:C How can I count length of the longest continuous sequence of 0s in long variable?C如何计算长变量中最长连续0序列的长度?
【发布时间】:2019-04-11 08:19:15
【问题描述】:

我有一个简单的函数,它计算长变量中有多少个 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。直到现在我无意识地使用全零的值作为最长序列。它适用于一些数字。但是我需要实现一个新函数来找到最长的零序列。

【问题讨论】:

  • 好吧,你为什么不试试呢?我认为您可以使用已有的基本结构。我认为您需要添加两个变量,一个用于计算当前可见的零的数量,另一个用于跟踪看到的最长序列。你只需要决定当(binn & 1)为真时做什么,为假时做什么。

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


【解决方案1】:

您实际上是在计算您找到的 total 个零。找到 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;
}

【讨论】:

  • @DavidSchwartz 好点。实际上,我会将count > maxcount 的检查移到“0”的情况下以解决这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-10
  • 2014-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多