每日一题:求最大连续比特数

 

功能: 求一个byte数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1
    
输入: 一个byte型的数字
    
输出: 无
     
返回: 对应的二进制数字中1的最大连续数

 

输入描述:

 

输入一个byte数字


 

输出描述:

 

输出转成二进制之后连续1的个数

示例1

输入

3

输出

2

思路:让一个数字第一位1做与运算,如果是1,说明这个位置是1,否则就是0;不管是0是1,创建一个数组放这些只有0/1数字,只要求得数组中,1连续出现的次数就可以了。

 

代码:

#include<iostream>
#include<vector>
using namespace std;

int main()
{
	int n;
	while (cin >> n)
	{
		vector<int> arr;
		while (n)
		{
			if (n & 1)
				arr.push_back(1);
			else
				arr.push_back(0);
			n = n >> 1;
		}
		int count = 0;
		int x = 0;
		int max = 0;
		for (int i = 0; i < arr.size(); ++i)
		{
			while (arr[i] == 1)
			{
				count++;
				i++;
				if (i == arr.size())
					break;
			}
			if (count>=max)
			{
				max = count;
				count = 0;
			}

		}
		cout << max << endl;
	}
	return 0;
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值