描述
求一个int类型数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1
数据范围:数据组数:1≤t≤5 ,1≤n≤500000
进阶:时间复杂度: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)这一思路很重要 ;
② 当前帖子仅供自我精进、学习使用,有不足之处欢迎指正;