• 二进制与十进制转换工具类


    package util;
    
    /**
     * 二进制工具类
     * 
     * @author 谢辉
     * @date 2020.07.01
     *
     */
    public class BinaryUtil {
        /**
         * 十进制数字转二进制
         * 
         * @param num       十进制数字
         * @param strResult 结果容器,追加结果用,
         * @return 返回结果字符串
         * @throws IllegalArgumentException
         */
        public static String DecimalToBinary(Integer num, StringBuilder strResult) throws IllegalArgumentException {
            if (num < 0) {
                throw new IllegalArgumentException(num + "并非十进制的有效整数值,请正确输入!");
            }
            Integer integer = num / 2;// 整除结果
            Integer StrInteger = num % 2;// 取余结果
            if (integer == 0) {// 表示1/2=0;商为0,不能再往下除了
                strResult.append(StrInteger);
            } else {
                // 递归追加结果
                strResult.append(StrInteger);
                DecimalToBinary(integer, strResult);
            }
            return new StringBuilder(strResult.toString()).reverse().toString();
        }
    
        /**
         * 二进制转换十进制
         * 
         * @param binary 二进制字符串
         * @return 转换的结果
         * @throws IllegalArgumentException
         */
        public static Integer BinaryToDecimal(String binary) throws IllegalArgumentException {
            char[] array = binary.toCharArray();
            // 对传入的二进制字符串检测
            for (int i = 0; i < array.length; i++) {
                if (array[i] != '0' && array[i] != '1') {
                    throw new IllegalArgumentException("二进制只能有0或1!");
                }
            }
            // 再次检测字符串,避免‘00010101’,转成‘10101’
            int index = binary.indexOf("1") > 0 ? binary.indexOf("1") : 0;
            binary = array[0] == '0' ? binary.substring(index) : binary;
            // 规范二进制字符串后,开始计算结果
            return compute(binary);
        }
    
        private static Integer compute(String binaryNum) {
            Integer decimalNum = 0;
            int parseInt = Integer.parseInt(binaryNum);
            if (parseInt == 1) {
                return 1;
            } else if (parseInt <= 0) {
                return 0;
            } else {
                char[] binaryArr = binaryNum.toCharArray();
                decimalNum = binaryArr[1] == '0' ? 2 : 3;
                for (int i = 2; i < binaryArr.length; i++) {
                    decimalNum = binaryArr[i] == '0' ? decimalNum * 2 : decimalNum * 2 + 1;
                }
                return decimalNum;
            }
        }
    
        /**
         * 测试功能
         * 
         * @param args
         */
        public static void main(String[] args) {
            int num = 3;
            String string = DecimalToBinary(num, new StringBuilder());
            System.out.println(num + "的二进制结果:" + string);
    
            Integer binaryToDecimal = BinaryToDecimal(string);
            System.out.println(string + "的十进制结果:" + binaryToDecimal);
        }
    
    }
  • 相关阅读:
    洛谷P4548 [CTSC2006]歌唱王国(概率生成函数)
    洛谷P3643 [APIO2016]划艇(组合数学)
    洛谷T46780 ZJL 的妹子序列(生成函数)
    洛谷P4220 [WC2018]通道(边分治+虚树)
    洛谷P4931 情侣?给我烧了!(加强版)(组合数学)
    洛谷P4451 [国家集训队]整数的lqp拆分(生成函数)
    thinkphp5.0 页面缓存
    thinkphp5.0 cache数据缓存机制
    laravel 视图调用方法并传递参数
    laravel 安装配置前准备
  • 原文地址:https://www.cnblogs.com/xiejn/p/13222290.html
Copyright © 2020-2023  润新知