华为OJ平台——求最大连续bit数
题目描述:
求一个byte数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1
输入:
一个byte型的数字
输出:
对应的二进制数字中1的最大连续数
思路:
通过移位运算可以一次判断每一位的0、1值,然后通过统计可以得到结果
import java.util.Scanner; //byte 的范围是-128~127 public class MaxContinueOne { public static void main(String[] args) { //读入byte类型的整数 Scanner cin = new Scanner(System.in) ; byte num = cin.nextByte() ; cin.close() ; int max = 0 ; //记录最大的连续bit位数 int count = 0 ; //临时记录当前的连续bit位数 int temp = 1 ; boolean lastFlag = false ; //记录上一个比特位为0(false)还是1 //byte类型共8位,所以执行8次就可以了 for(int i = 0 ; i < 8 ; i++){ //temp & num 不为0表示当前位为1 if((temp & num) != 0){ if(lastFlag){ count++ ; }else{ count = 1 ; lastFlag = true ; } //将最大的连续bit位数记为max max = max > count ? max : count ; }else{ lastFlag = false ; } //将temp左移一位,进入下一位的比较准备 temp = temp << 1 ; } System.out.println(max) ; } }