题目描述
功能: 求一个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;
}