一,题目描述
功能: 求一个byte数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1
输入: 一个byte型的数字
输出: 无
返回: 对应的二进制数字中1的最大连续数
输入描述:
输入一个byte数字
输出描述:
输出转成二进制之后连续1的个数
示例1
输入
3
输出
2
二,程序分析
1. 看到这个题目之后,还是比较简单的,下来我们来分析一下。
2. 根据位运算,获取每一位的二进制值。获取第i位的值: (n >> i) & 1。如果1连续,则计数累加,如果不连续,则从0开始计数。
3. 详细的过程,已近在下面的代码中写好了,可以看到非常清楚,明了。
三,程序代码
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
int n;
while (cin >> n)
{
//创建一个加数变量,和一个更新后的变数变量
int count = 0, maxcount = 0;
while (n)
{
//把数编程二进制的数
if (n & 1)
{
++count;
maxcount = max(count, maxcount);
}
else
{
//当1不是连续的时候,重新计算
count = 0;
}
//将现在值进行右移,重新计算1的个数
n = n >> 1;
}
cout << maxcount << endl;
}
return 0;
}
四,运行结果
感觉不错的话,关注一个再走吖!!!