题目描述
功能: 求一个byte数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1

输入: 一个byte型的数字

输出: 无

返回: 对应的二进制数字中1的最大连续数
输入描述:
输入一个byte数字

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

示例1
输入
3
输出
2

#include <stdio.h>

/*
   各进制间转换方法:
   https://blog.nowcoder.net/n/66e2146dd79e4be4a164d467b1ae50ac

   转为2进制字符串:除2取余,只需统计1,
   故不需要转为实际的二进制数,只需得到所有01字符,
   在转换过程中就可以直接完成统计

   若余数为1,则开始统计1的个数,若遇到0,则与当前最大的连续1个数进行比较,
   存储最大值,然后继续取余,直至商为0对应的余数

   调试用例:3,5,0(考试模式下只能自测发现问题,所以要取各种用例来自测,可借助打印count来观察程序运行过程,发现漏或者与预期不符的地方)

另一个回答:
链接:https://www.nowcoder.com/questionTerminal/4b1658fd8ffb4217bc3b7e85a38cfaf2?f=discussion
来源:牛客网
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int a;
    while(cin>>a)
    {
        int sum=0,max=0;
        while(a){
            if(a%2){
                sum++;
                if(sum>max) max=sum;
            }
            else sum=0;
            a=a/2;
        }
        cout<<max<<endl;
    }   
    return 0;
}
*/

int main()
{
    int n;

    while(scanf("%d",&n)!=EOF){
        int max=0;
        int count=0;
        int flag = 0;
        int inte=n;
        int r;
        while(1){
            r = inte%2;
            if(r==1){
                flag = 1;
                count++;
            }else if(r==0 && flag==1){
                if(count>max){
                    max = count;
                }
                flag = 0;
                count = 0; // !!注意此处计数要清0,到此处1已经不连续了,需要重新开始统计下一轮
            }
    //        printf("count=%d\n",count);
            if(inte == 0){ 
                // 多处理一次取余,使其遇到r=0,防止全1的二进制数(如3)导致的max没有赋值
                // 如1/2=0...1,在得到商inte为0前,已经处理了r=1;此时由于inte还未进行/2赋值操作,
                // 所以inte还为1,不退出循环,然后/2使inte=0;当进到下一轮时,r=0,然后判断得inte=0,结束循环

                break;
            }
            inte = inte/2;
        }
        printf("%d\n",max);
    }

    return 0;
}