解题思路:
int 型变量转二进制, 利用循环相除即可。
利用三个 变量来 解决这个 最大连续数的判断问题。
nums: 某一次连续的最大 1bit 数;
max_number_1 : 最大的连续1 bit 数;
last_flag: 上次bit 位是否为1, 用来判断本次循环 nums 是否+1;如果上一位也为1,则最大连续 +1,否则将nums 置为0
#include <stdio.h>
int main(void) {
unsigned int data = 0;
while (scanf("%d", &data) != EOF) {
unsigned int nums = 0;
unsigned int max_number_1 = 0;
unsigned int last_flag = 0;
while (data != 0) {
if (data%2 == 1) {
if(last_flag == 1) {
nums++;
} else {
nums = 1;
}
if(nums > max_number_1) max_number_1 = nums; // 利用本次循环不断将最大连续数量 赋值给到max_number_1 变量
last_flag = 1;
} else {
last_flag = 0;
}
data = data/2; // 遍历 二进制的每一位
}
printf("%d\n", max_number_1);
}
return 0;
}