基础编程题之最大连续bit数(位运算)

Posted 快乐江湖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基础编程题之最大连续bit数(位运算)相关的知识,希望对你有一定的参考价值。

题目

这里是引用

这道题涉及到的也是位运算,具体思路就是,定义一个count,定义一个max,从右向左依次扫描这个数的二进制位,遇到1就count++,遇到0就将count置为0,并且将max和count进行比较,并把大的赋值给max
在这里插入图片描述
同时还有一个问题,就是如何判断一个二进制数字的某一位是0还是1,我们只需要将某个数移位然后让它和1进行与运算,如果结果为1表明此位为1,否则此位为0

using namespace std;

int main()
{
    int num=0;
    while(cin>>num)
    {
        int count=0;
        int max=0;
        while(num)
        {
            if(num&1)
            {
                count++;
            }
            else
            {
                if(count>max)
                {
                    max=count;
                }
                count=0;
            }
            num=num>>1;
        }
        cout<<max<<endl;
    }
    return 0;
}

这样提交后,通过率为一半
在这里插入图片描述
其中200的二进制位为1100 1000,可以发现在最后一次结束时,由于没有遇到最后一位的0,所以没有进入循环,因此max没有被更新,所以判断代码换到上一个if分支中即可

using namespace std;

int main()
{
    int num=0;
    while(cin>>num)
    {
        int count=0;
        int max=0;
        while(num)
        {
            if(num&1)
            {
                if(count>max)
                {
                    max=count;
                }
                count++;
            }
            else
            {
                count=0;
            }
            num=num>>1;
        }
        cout<<max<<endl;
    }
    return 0;
}

在这里插入图片描述

以上是关于基础编程题之最大连续bit数(位运算)的主要内容,如果未能解决你的问题,请参考以下文章

华为OJ平台——求最大连续bit数

基础编程题之不用加减乘除做加法

华为机试题HJ86求最大连续bit数

华为机试题HJ86求最大连续bit数

32位和64位系统区别及int字节数

32位和64位系统区别及int字节数