列表

详情


HJ86. 求最大连续bit数

描述

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

数据范围:数据组数:
进阶:时间复杂度:,空间复杂度:

输入描述

输入一个int类型数字

输出描述

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

示例1

输入:

200

输出:

2

说明:

200的二进制表示是11001000,最多有2个连续的1。

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C 解法, 执行用时: 2ms, 内存消耗: 292KB, 提交时间: 2022-01-27

#include <stdio.h>

int main() {
    int a;
    while(scanf("%d",&a) != EOF) {
        int max = 0, currentMax = 0;
        while (a > 0){
           if ((a & 0x1) == 1) {
               currentMax++;
               if (currentMax > max) {
                   max = currentMax;
               }
           } else {
               currentMax = 0;
           }
           a = a >> 1;
        }
        printf("%d\n",max);
    }
}

C 解法, 执行用时: 2ms, 内存消耗: 296KB, 提交时间: 2022-02-09

#include <stdio.h>
int main()
{
    int n,i,j,m,k,max,count[100],x;
    while(scanf("%d",&n)!=EOF)
    {
        for(j=0;j<100;j++)
        {
            count[j]= 0;
        }
        i = 0;
        x = 0;
        m = n;
        while(m!=0) //先转换为二进制数
        {
            k = n%2;
            if(k==1)
            {
                count[x]++;
            }
            else
            {
                x++;
            }
            m = n/2;
            n = m;
        }
        max = count[0];
        for(j=1;j<=x;j++)//选出最大连续的
        {
            if(count[j]>max)
            {
                max = count[j];
            }
        }
        printf("%d\n",max);
    }
    return 0;
}

上一题