每日一题|[每日一题]61(求最大连续bit数)

题目描述 功能: 求一个byte数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1
输入: 一个byte型的数字
输出: 无
返回: 对应的二进制数字中1的最大连续数
输入描述: 输入一个byte数字
输出描述: 输出转成二进制之后连续1的个数
示例1

输入 3输出 2

思路
根据位运算,获取每一位的二进制值。获取第i位的值: (n >> i) & 1。如果1连续,则计数累加, 如果不连续,则从0开始计数。
解答代码:
#include using namespace std; int main() { int num; while (cin >> num) { int sum = 1, count = 0; while (num) { //获取当前位的二进制值 if (num & 1) { //如果1的值连续,计数累加,并且跟新最大计数 ++count; if (count > sum) { sum = count; } } else{ count = 0; } //右移一次,为获取下一位二进制值做准备 num = num >> 1; /*if (num % 2) { count++; if (count > sum) { sum = count; } } else { count = 0; } num /= 2; */ } cout << sum << endl; }return 0; }

代码生成图:
每日一题|[每日一题]61(求最大连续bit数)
文章图片

每日一题|[每日一题]61(求最大连续bit数)
文章图片

【每日一题|[每日一题]61(求最大连续bit数)】如有不同见解,欢迎留言讨论~~

    推荐阅读