十进制转八进制、十六进制转八进制

十进制转八进制

例子:
输入: 10
输出: 12

思路:对8进行取模运算并存入栈,直至该数字为0,将栈输出
public static void Dex2Oct(int num){
        if (num < 8){
            System.out.println("转换后的八进制数为:"+ num);
        }
        int i;
        Stack<Integer> stack = new Stack<>();
        while (num > 0){
            i = num % 8;
            stack.push(i);
            num /= 8;
        }

        while (stack.size() > 0){
            Integer pop = stack.pop();
            System.out.format("%d",pop);
        }
    }

十六进制转八进制 先将十六进制转为十进制,再将十进制转为八进制
方法:从末尾遍历字符串,权值为0,倒数第二位权值为16,第三位为16*16,依次。。。
使用Math.pow(16,index),index代表权值
public static void Hex2Oct(String n){
        //位数
        int reIndex = 0, dexVal = 0;
        for (int i = n.length() - 1; i >= 0; i--) {
            if (Character.isDigit(n.charAt(i)) &&
                    Integer.parseInt(String.valueOf(n.charAt(i))) >=0 &&
                    Integer.parseInt(String.valueOf(n.charAt(i))) <=9){
                dexVal += Integer.parseInt(String.valueOf(n.charAt(i))) * Math.pow(16,reIndex);
            }else{
                switch (n.charAt(i)){
                    case 'A':
                        //权值*该位上的数字值
                        dexVal += 10 * Math.pow(16,reIndex);
                        break;
                    case 'B':
                        dexVal += 11 * Math.pow(16,reIndex);
                        break;
                    case 'C':
                        dexVal += 12 * Math.pow(16,reIndex);
                        break;
                    case 'D':
                        dexVal += 13 * Math.pow(16,reIndex);
                        break;
                    case 'E':
                        dexVal += 14 * Math.pow(16,reIndex);
                        break;
                    case 'F':
                        dexVal += 15 * Math.pow(16,reIndex);
                        break;
                }
            }
            reIndex ++;
        }
        //调用上述十进制转八进制
        Dex2Oct(dexVal);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值