描述
求一个int类型数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1
数据范围:数据组数:1\le t\le 5\1≤t≤5 ,1\le n\le 500000\1≤n≤500000
进阶:时间复杂度:O(logn)\O(logn) ,空间复杂度:O(1)\O(1)
输入描述:
输入一个int类型数字
输出描述:
输出转成二进制之后连续1的个数
示例1
输入:
200
复制输出:
2
复制说明:
200的二进制表示是11001000,最多有2个连续的1。
#include <iostream>
#include <string.h>
int bitContinueOne(int num)
{
if(0 == num)
{
return 0;
}
int count = 1;
//1.先求num转化后的二进制,使用字符串存储
std::string bitStr;
while(num)
{
int remainder = num % 2;
bitStr += remainder + '0';
num /= 2;
}
// std::cout << "bitStr = " << bitStr << std::endl;
//2.遍历字符串找最大连续数
for(int i = 0; i < bitStr.length() - 1; ++i)
{
int tempCount = 0;
if(bitStr[i] == 1 + '0')
{
tempCount = 1;
}
for(int j = i + 1; j < bitStr.length(); ++j)
{
if(bitStr[i] == bitStr[j] && bitStr[i] == 1 + '0')
{
tempCount++;
if(tempCount > count)
{
count = tempCount;
}
}
else
{
break;
}
}
}
return count;
}
int main()
{
int num;
std::cin >> num;
std::cout << bitContinueOne(num) << std::endl;
return 0;
}