一、题目:
描述
求一个byte数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1
本题含有多组样例输入。
输入描述:
输入一个byte数字
输出描述:
输出转成二进制之后连续1的个数
二、输入输出示例:

三、代码:
方法一(繁琐):将输入的数据转换为2进制逆序存入vector容器中,在判断最大连续的1的个数
#include<iostream>
using namespace std;
#include<vector>
int main()
{
int num;
while(cin>>num){
vector<int> v;
while(num != 1){
v.push_back(num % 2);
num /= 2;
}
v.push_back(1);
int res = 0,count = 0;
for(int i=0;i<v.size();i++){
if(v[i] == 1){
count++;
if(res < count){
res = count;
}
if(v[i+1] == 1 && i+1<v.size()){
count++;
i++;
if(res < count){
res = count;
}
}
}
else{
count = 0;
}
}
cout<<res<<endl;
}
system("pause");
return 0;
}
方法二:边转换成2进制边判断最长的连续1的个数
#include<iostream>
using namespace std;
int main()
{
int num;
while(cin>>num){
int res = 0,count = 0;
while(num != 0){
if(num % 2 == 1){
count++;
res = res < count ? count : res;
}
else{
count = 0;
}
num /= 2;
}
cout<<res<<endl;
}
system("pause");
return 0;
}
这篇博客介绍了华为机试的一道算法题,要求求解一个byte数字转换为二进制后,1的最大连续个数。提供了两种解题思路,一种是将输入数据转换为逆序2进制存储后再判断,另一种方法是在转换过程中直接判断最长连续1的个数。
1036

被折叠的 条评论
为什么被折叠?



