【华为机试】求最大连续bit数

来源:互联网 发布:mysql5.7 内存优化 编辑:程序博客网 时间:2024/04/29 17:43

题目描述

功能: 求一个byte数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1
输入:一个byte型的数字
返回: 对应的二进制数字中1的最大连续数

输入描述:

输入一个byte数字

输出描述:

输出转成二进制之后连续1的个数

示例1

输入

3

输出

2

方法一分析:直接判断最后一位是1还是0,是1个数加1,是0更新最大1个数。每次循环后向右移动一位。

#include <iostream>using namespace std;int main(){int n;while(cin>>n){int k=0,kmax=0;while(n!=0){if(n%2==1)  ++k; else if(n%2==0)  {kmax=max(k,kmax);k=0;}n=n/2;  //n=n>>1;}kmax=max(k,kmax);cout<<kmax<<endl;}return 0;}

方法二分析:每次向右(左)移动1位与原数相与,消掉连续1中的一个,其他位上全为0,重复消掉所有的1。

#include <iostream>using namespace std;int main(){int byte;while(cin>>byte){int k=0;for(k=0;byte!=0;++k)byte=byte&(byte<<1);   //byte=byte&(byte>>1);  cout<<k<<endl;}return 0;}