求最大连续bit数(测试用例有问题)
求最大连续bit数
http://www.nowcoder.com/questionTerminal/4b1658fd8ffb4217bc3b7e85a38cfaf2
java直接用位运算&,用当前数字和1做“&”操作,如果结果是1,说明此时的二进制第一位为1,然后右移一位,直至数字为0。
注意java的>>是有符号右移,也就是说,负数用>>右移的话,会在左侧补1而不是0,这就会影响最终对1的计数。所以这里我们要使用无符号右移>>>。
另外题目的意思是我们需要接收一个byte数字,然而我们提交时第一个没通过的测试用例为200。很显然,byte的取值范围为-128 ~ 127,题目有些莫名其妙,直接用int来接收是没有问题的。
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // while (in.hasNextByte()) { // byte num = in.nextByte(); while(in.hasNextInt()){ int num = in.nextInt(); int max = 0; int count = 0; while(num != 0){ if((num&1) == 1){ count++; max = Math.max(max,count); } else{ count = 0; } num >>>= 1; } System.out.println(max); } } }