zoukankan      html  css  js  c++  java
  • 华为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) ;
    
        }
    
    }


         

  • 相关阅读:
    1052 卖个萌 (20 分)
    1046 划拳 (15 分)
    1051 复数乘法 (15 分)
    1042 字符统计 (20 分)哈希
    1041 考试座位号 (15 分)哈希
    1061 判断题 (15 分)
    1093 字符串A+B (20 分)简单哈希
    Hibernate框架
    SVN的安装与介绍
    easyUI的简单操作
  • 原文地址:https://www.cnblogs.com/mukekeheart/p/5635521.html
Copyright © 2011-2022 走看看