开发者社区> 问答> 正文

怎么计算二进制数最长连续1和0的长度

怎么计算二进制数最长连续1和0的长度

展开
收起
知与谁同 2018-07-22 10:04:49 2153 0
1 条回答
写回答
取消 提交回答
  • 社区管理员
    具体代码部分可以参见以下我已做过的回答:

    http://zhidao.baidu.com/question/485545719.html

    如果二进制数的位数(设为 N) 可以确定,那么,详细的算法如下,请对照上面链接中的具体代码理解:

    最长连续1长度赋初值为0;

    最长连续0长度赋初值为1;
    临时连续1长度赋初值为0;
    临时连续0长度赋初值为0;

    从 0 到 (N-1) 执行 N 次循环

    {
    若当前位为1,显然临时连续0长度计数应该终止

    {
    若临时连续0长度非0
    {
    若临时连续0长度大于最长连续0长度
    {
    将临时连续0长度的值赋给最长连续0长度;
    }

    临时连续0长度复位为0;
    临时连续1长度设为1,开始计数
    }
    否则
    {
    临时连续1长度加1(递增)

    }

    }
    否则,说明当前遇到了位为0的情况,临时连续1长度计数应该终止
    {
    若临时连续1长度非0
    {
    若临时连续1长度大于最长连续1长度
    {
    将临时连续1长度的值赋给最长连续1长度;
    }

    临时连续1长度复位为0;
    临时连续0长度设为1,开始计数
    }
    否则
    {
    临时连续0长度加1(递增)
    }
    }

    }

    循环完毕后,结果就在变量“最长连续1长度”和“最长连续0长度”中。

    其实严格来说,你的问题提得不是很完整,因为设计到具体编程时,首先必须考虑和确定的问题是:数据是如何表示的。比如你提到的“二进制数”,其表示方法事实上是可以有容易多种的,譬如其每一个有效位 0 或 1,既可以只用一位 (bit) 来表示,但只要我们愿意,或者有时出于方便考虑,事实上当然也可以用 2, 3, 4, 5, ...8... 直至N位来表示每个有效位。但这一说会引出更大的话题,不说也罢。
    2019-07-17 22:58:12
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载