顺序栈实现十进制和十六进制转换[java]

本文介绍如何使用顺序栈分别实现十进制到十六进制以及十六进制到十进制的转换。在十进制转十六进制过程中,通过除16取余,将余数字符化并存入栈中。而在十六进制转十进制时,从16进制字符串开始,逐个字符弹栈并进行加权计算,将字符转换为对应的数值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

顺序栈实现十进制和十六进制转换[java]

十进制转十六进制

  1. 创建一个String类型的顺序栈,存放数字和字符
  2. 十进制除16取余,余数若小于10则直接进栈;若大于10,通过(char)(余数+55)转成字母(char)(65)是A
  3. 除尽后定义一个字符串接收栈的出栈,并输出
package p2.线性结构;
//顺序栈十进制转十六进制
public class DecToHex {
    public static void main(String[] args) {
        int num = 654321;
        ArrayStack<String> stack = new ArrayStack<>();
        //逐个入栈
        while (num != 0){
            int a = num % 16;
            if (a < 10){
                stack.push(a+"");
            }else {
                stack.push((char)(a+55) + "");
            }
            num /= 16;
        }
        //逐个出栈
        StringBuilder sb = new StringBuilder();
        while (!stack.isEmpty()){
            sb.append(stack.pop());
        }
        System.out.println(sb);
    }
}

十六进制转十进制

  1. 创建一个Character(字符型)的顺序栈并将16进制的字符串逐一进栈
  2. 再将栈内的字符一个个弹出,进行加权计算
  3. 对于数字或字母(弹栈出来都是char类型),如果是字母,则c - ‘A’ + 10进行转换(‘A’-‘A’=0),如果是数字,则c-‘0’(‘1’-‘0’=1)将字符转换成数字
package p2.线性结构;
//顺序栈实现十六进制转十进制
public class HexToDec {
    public static void main(String[] args) {
        String hex = "9FBF1";
        ArrayStack<Character> stack = new ArrayStack<>();
        for (int i = 0;i<hex.length();i++){
            stack.push(hex.charAt(i));//charAt(i)取字符串中的第i个字符
        }
        int sum = 0;
        int mi = 0; //表示幂
        while (!stack.isEmpty()){
            char c = stack.pop();
            sum += getNumber(c) * Math.pow(16, mi);
            mi++;
        }
        System.out.println(sum);
    }

    private static int getNumber(char c){
        if (!(c >= '0' && c<='9' || c>='A' && c<='F')){
            throw new IllegalArgumentException("wrong char");
        }
        if (c >= '0' && c <= '9'){
            return c - '0';
        }else {
            return c - 'A' + 10;
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值