java十进制转二进制四进制八进制代码

起因:

面试的时候被问到能否现场写一个进制转换的方法,比如10进制转16进制等.

内心戏:

卧槽,16进制是啥东西?满16进1位,但是怎么表示16呢?1,2,3,4,5,6,7,8,9,10,11,12,13,14,15?然后大于15就进一位?
我特么的连16进制是啥都不知道,写个鸡儿转16进制啊.
面试官说,那你随便写个进制吧,10转2也行.

内心戏02:

10转2怎么转来着?然后开始快速回忆初中高中大学老师怎么是怎么讲10转2的.

10进制转2进制:

功夫不负有心人,我连蒙带猜知道了10转2的过程了.
10÷2=5余0
5÷2=2余1
2÷2=1余0
1÷2=0余1,
余数从下到上连在一起便是结果:1010.

核心代码如下:

public String transJinZhi01(String str, int jinZhi) {
    
    

        assert str != null && str.length() > 0;
        assert jinZhi % 2 == 0 && jinZhi > 0;
        Stack<Object> objects = new Stack<>();
        //将字符串转成数字
        int num = Integer.valueOf(str);
        //第一次取余数
        int yuShu = num % jinZhi;
        //第一次的商,下面判断是否需要遍历
        int shang = num / jinZhi;
        objects.push(yuShu);
        do {
    
    
            yuShu = shang % jinZhi;
            shang = shang / jinZhi;
            objects.push(yuShu);
        } while (shang != 0);

        StringBuffer stringBuffer = new StringBuffer();
        while (!objects.empty()) {
    
    
            Object pop = objects.pop();
            stringBuffer.append(pop);
        }
        String s1 = stringBuffer.toString();
        System.out.println("数字" + str + "转化为" + jinZhi + "进制后为 = " + s1);
        return null;
    }

测试代码如下:

    @Test
    public void test01() {
    
    

        //报错
//        this.transJinZhi01(null, 10);
        //报错
//        this.transJinZhi01("10", 1);
        //报错
//        this.transJinZhi01("10", 0);
        //报错
//        this.transJinZhi01("", 10);
        //正常
        this.transJinZhi01("1000", 2);
        this.transJinZhi01("1000", 8);
        this.transJinZhi01("1000", 10);
        //看源码怎么写的
//        String s = Integer.toBinaryString(10);
//        System.out.println("s = " + s);
    }

运行结果是:

数字1000转化为2进制后为 = 1111101000
数字1000转化为8进制后为 = 1750
数字1000转化为10进制后为 = 1000

结束语:

面试时粗略写的,想着趁着这个机会把这个完善下记录下来,也是自己的短板.
此方法是10进制转2、4、8进制的方法,抛开效率讲是可行的,欢迎各位伙伴指正.
我为啥不写任意进制转换呢?
因为我没搞懂超过10进制后怎么表示呢…
尴尬尴尬

猜你喜欢

转载自blog.csdn.net/weixin_43555115/article/details/109085686