题目描述
功能: 求一个byte数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1
输入: 一个byte型的数字
输出: 无
返回: 对应的二进制数字中1的最大连续数
输入描述:
输入一个byte数字
输出描述:
输出转成二进制之后连续1的个数
输入例子:
3
输出例子:
2
题目分析
- 方法一:将输入数字转换成二进制,统计连续1的个数中最大的那个(这个大概是最先想到的吧)
- 方法二:对输入数字做位移运算,然后与原数相与(byte&=byte<<1)
题目代码
方法一:
#include<iostream>
using namespace std;
int main(){
int n,max=0,count=0;
while(cin>>n){
max=0,count=0;
while(n){
if(n%2!=0)
count++;
else
count=0;
if(count>max)
max=count;
n/=2;
}
cout<<max<<endl;
}
return 0;
}
方法二:
#include<iostream>
using namespace std;
int main(){
int n,i=0;
while(cin>>n){
i=0;
while(n!=0){
n=n&(n<<1);
i++;
}
cout<<i<<endl;
}
return 0;
}
题目来源
https://www.nowcoder.com/ta/huawei