描述

求一个int类型数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1

数据范围:数据组数:1t5 1n500000 
进阶:时间复杂度:O(logn),空间复杂度:O(1)

输入描述:

输入一个int类型数字

输出描述:

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

示例1

输入:
200
输出:
2
说明:
200的二进制表示是11001000,最多有2个连续的1。
代码部分:
#include <stdio.h>
#include <math.h>
//以下是Senky的代码:
int main() {
    int n = 0; //数字n
    int count = 0; //计数器
    int maxbite = 0; //最大的比特1的数量
    while (~scanf("%d", &n)) { //连续输入,最多五组
        for (int i = 0; i < 32; i++) {//int有32位,最多左移31次
            if (n & (1 << i)) { //从最低向高开始循环检查n的bite是否为1
                count++;//当前bite为1则count+1
                maxbite = maxbite > count ? maxbite : count;//maxbite取两者最大
            }else{
                count=0;//bite1未连续则重新计算
            }
        }
        printf("%d",maxbite);//输出结果
    }
return 0;//编辑于2022/10/11
}
总结
①  n&(1<<i)这一思路很重要 
   当前帖子仅供自我精进、学习使用,有不足之处欢迎指正;