题目信息
求一个byte数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1。本题含有多组样例输入。
输入描述:输入一个byte数字
输出描述:输出转成二进制之后连续1的个数
示例输入:
3
5
示例输出:
2
1
说明
3的二进制表示是11,最多有2个连续的1。
5的二进制表示是101,最多只有1个连续的1。
编码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class MostContinueBit {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input ;
while ((input = br.readLine()) != null) {
String binaryNum = Integer.toBinaryString(Integer.valueOf(input));
int max = 0;
int index = 0;
char[] chArr = binaryNum.toCharArray();
for (int i=0; i<chArr.length; i++) {
if (chArr[i] == '1') {
if (index == 0) {
index = 1;
// 处理1这种只有1个1的特殊情况
max = Math.max(max, index);
} else {
// 连续1则index++
index++;
// 防止连续1后没有0间隔的后续位数,则这里须要将index赋给max
max = Math.max(max, index);
}
} else {
// 连续1之后有0隔开,这里index置0
if (index > 0) {
max = Math.max(max, index);
index = 0;
}
}
}
System.out.println(max);
}
}
}