动态数组-----栈的应用之进制转换

十进制转十六进制

在这里插入图片描述

import java.util.Scanner;

//十进制转十六进制
public class DecToHex {
    public static void main(String[] args) {
        //1、获取用户的输入 非负整数
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入一个十进制数字");
        int number=scanner.nextInt();

        //创建一个栈用来存储余数  存的是字符数据
        ArrayStack<Character> stack=new ArrayStack<Character>();
        int mod;
        //计算余数
        while(number!=0){
            mod=number%16;   //获取余数
            if(mod<10){
                //'0'+3= 表示的是字符'0'之后第三个位置的字符‘3’的编码
                stack.push((char) ('0'+mod));
            }else{
                //'A'+11-10=表示的是字符'A'之后第三个位置的字符‘B’的编码
                stack.push((char) ('A'+mod-10));
            }
            number/=16;
        }
        while (!stack.isEmpty()){
            System.out.print(stack.pop());
        }
    }

}

执行结果

请输入一个十进制数字
555
22B

十六进制转十进制

在这里插入图片描述

import java.util.Scanner;

public class HexToDec {
    public static void main(String[] args) {
        //1、获取用户的输入 非负整数
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入一个十六进制数字");
        String hex=scanner.nextLine();
        //创建一个栈用来存储余数  存的是字符数据
        ArrayStack<Character> stack=new ArrayStack<Character>();

        //进栈
        for(int i=0;i<hex.length();i++){
            stack.push(hex.charAt(i));
        }
        //弹栈,计算结果
        int sum=0;
        int exponent=0; //幂数
        char c;
        while (!stack.isEmpty()){
            c=stack.pop();
            sum+=getNumber(c)*Math.pow(16,exponent);
            exponent++;

        }
        System.out.println(sum);
    }

    private static int getNumber(char c) {
        if(!(c>='0'&&c<='9'||c>='A'&&c<='F')){
            throw new IllegalArgumentException("输入异常");
        }
        if(c>='0'&&c<='9'){
            //转换数字字符为数字
            return c-'0';
        }else {
            //转换字母字符为数字
            return c-'A'+10;
        }
    }
}

执行结果

请输入一个十六进制数字
22B
555
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值