题解 | #求最大连续bit数#
求最大连续bit数
https://www.nowcoder.com/practice/4b1658fd8ffb4217bc3b7e85a38cfaf2
采用按位操作一个 while 循环解决问题。但是要注意特殊情况 num = 1 时的处理 ~
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int num = in.nextInt(); // 最大连续数 int max = 0; // 计数器 int count = 0; while(num > 0){ /* 这里有个坑点,就是数字 3 这种,二进制表示是 11 8 4 2 1 ----------- 0 0 1 1 = 3 在进行循环的时候,因为如果向右移位后变为了 1 ,就无法再计数了 所以要对 1 的时候做一个特殊处理。 小弟不才只能想到这种 low 办法了... 如果 num == 1,说明是最后一位了,需要判断以下计数器是否大于 0 如果大于 0 说明还在连续状态上,则计数器加 1,count++ 否则则不是连续的状态(因为如果中间断开,count会置为0) 不连续状态就直接把 count 置为 1,再去和 max 比较取大值 */ if(num == 1) { if(count > 0) { count ++; } else { count = 1; } if(count > max) { max = count; } } // 如果当前 num 和 1 进行按位与操作得 1,说明此位置是 1,计数器累加 // 否则就要判断当前这个 count 和 max 比较,谁大取谁,注意要把计数器清空为 0 if((num & 1) == 1) { count ++ ; } else { if(count > 0) { if (count > max) { max = count; } count = 0; } } // 无符号右移 1 位 num = num >>> 1; } System.out.println(max); } }