思路

  1. 将10进制转为2进制,将其存到数组中
  2. 利用移位统计1的个数,不断更新最大值
  3. 循环完毕输出最大值

Answer

#include<stdio.h>

int main() {
    int val;
    int cnt = 0;
    int num[1000];
    while (scanf("%d", &val) != EOF) {
        while (1) {//将10进制转为2进制并存到数组中
            if (val == 1) {
                num[cnt++] = 1;
                break;
            }
            if (val % 2 == 1) {
                num[cnt++] = 1;
            } else {
                num[cnt++] = 0;
            }
            val /= 2;
        }
        int j = 0;
        int max = 0;
        //统计1的个数
        for (int i = 0; i < cnt; i++) {
            if (num[i] & 0x01) {
                j++;
                if (j > max) {
                    max = j;
                }
            } else {
                j = 0;
            }
        }
        printf("%d", max);
    }
    return 0;
}