您的位置:首页 > 其它

如何判断某个二进制数如是否存在两位1中间有包含0的情况?

2017-03-03 09:40 405 查看
https://www.zhihu.com/question/52999719

知乎上的一道题目

如何判断某个二进制数如是否存在两位1中间有包含0的情况?

请尽量用基础数学解答,遍历一类的就不用说了,无解的话也请说明下。

例如:111100或100000或000000都是1中间没有0;101010或100111这都属于除1之外有多个0相连的情况。

 

回答中使用多次取反来确定连续1和连续0 的位置 再以两次取反结果相乘判断是否符合条件

 

不过使用状态机来解决也不失为一个办法

#include <iostream>

enum STATE {
ORI,
ONE,
ONEZERO,
ONEZEROONE
};

bool check(int M) {
STATE s = ORI;

while (M != 0)
{
char ch = M & 0x1 ? '1' : '0';
switch (s) {
case ORI:
if (ch == '1') s = ONE;
break;
case ONE:
if (ch == '0') s = ONEZERO;
break;
case ONEZERO:
if (ch == '1') return false;
}
M = M >> 1;
}
if (s == ONE || s == ONEZERO)
return true;
return false;
}

int main()
{
std::cout << check(184) << std::endl;
std::cout << check(120) << std::endl;

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: