怎么计算二进制数最长连续1和0的长度
收起
知与谁同
2018-07-22 10:04:49
2149
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