题目描述
求一个byte数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1
本题含有多组样例输入。直接暴力破解做出来的,一个一个相加得到最大值。但是感觉可能我的方法有些复杂了。
#include<stdio.h>
int main(){
int n;
while(scanf("%d",&n)!=EOF){
int maxn=0,tmp=0;
while(n){
if(n&1==1){
tmp++;
if(tmp>maxn){
maxn=tmp;
}
}else{
if(tmp>maxn){
maxn=tmp;
}
tmp=0;
}
n=n>>1;
}
printf("%d\n",maxn);
}
return 0;
}
另外再贴一个其他人的解法吧,这种解法貌似会更简单一些
//C++://
#include <iostream>
using namespace std;
int main(){
int n;
while(cin >> n){
int k=0;
for(k=0;n!=0;k++){//遇到进制的问题,多考虑用位运算
n=n&(n<<1);//求n与n移位后按位与的结果,如果连续的1的个数为1,则更新后的n为0;
}//如果有多个连续的1,则按位与之后其他位都为0,而连续1的个数减1;依次循环,直到n为0,k记录了移位多少次,即为连续1的个数
cout << k <<endl;
}
return 0;
}</iostream>