【华为机试】求最大连续bit数
2017-08-01 22:32
183 查看
题目描述
功能: 求一个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;
}
功能: 求一个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;
}
相关文章推荐
- 华为机试——求最大连续bit数
- 华为OJ--求最大连续bit数
- 华为OJ——求最大连续bit数
- 华为OJ——求最大连续bit数
- 华为OJ(求最大连续bit数)
- 【华为OJ】求最大连续bit数
- 华为OJ平台——求最大连续bit数
- 华为OJ——求最大连续bit数
- 【华为OJ】【084-求最大连续bit数】
- 华为oj初级 求最大连续bit数
- 华为机试题:输入一组大于等于0的整数,从小到大排序输出,输出有连续数时,只输出连续数的最小和最大值
- 华为机试 - 最小最大数之和
- 华为机试——最大递增数
- 华为机试 寻找最大正方形
- 华为机试题:输入一组大于等于0的整数,从小到大排序输出,输出有连续数时,只输出连续数的最小和最大值
- 华为机试 - 字符串去重复字节/字符串去连续重复字节
- 华为2014年机试样题 求最大递增数
- 华为机试题:输入一组大于等于0的整数,从小到大排序输出,输出有连续数时,只输出连续数的最小和最大值
- 华为机试题:输入一组大于等于0的整数,从小到大排序输出,输出有连续数时,只输出连续数的最小和最大值
- [华为机试题]最大连续递增子串