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

来源:互联网 发布:淘宝店刷王者贵族骗局 编辑:程序博客网 时间:2024/05/01 07:22

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;}


0 0
原创粉丝点击