十进制转换为十六进制
输入任意一个非负十进制整数,打印输出与其等值的十六进制数,例如计算654321的十六进制:
- 654321 ÷ 16 = 40895 ~ 1
- 40895 ÷ 16 = 2555 ~ 15
- 2555 ÷ 16 = 159 ~ 11
- 159 ÷ 16 = 9 ~ 15
- 9 ÷ 16 = 0 ~ 9
将余数依次存入栈中,然后依次弹栈,因此可以得出 654321 对应的十六进制数为 9FBF1
代码实现
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
System.out.println("请输入一个非负十进制整数");
int number = scan.nextInt();
//1.创建一个栈 用来存储余数
ArrayStack<Character> stack = new ArrayStack<>();
int mod;
//2.开始计算余数
while(number != 0){
mod = number % 16;
if(mod < 10){ //数字0-9
//'0' + 3 表示的是字符'0'之后的第3个位置的字符'3'的编码
stack.push((char)('0' + mod));
}else{ //数字10-15 -> A-F
//'A' + 11 - 10 表示的是字符'A'之后的第1个位置的字符'B'的编码
stack.push((char)('A' + mod - 10));
}
number /= 16; //自除
}
while(!stack.isEmpty){
System.out.println(stack.pop());
}
}
运行结果
十六进制转换为十进制
代码实现
public static void main(String[] args){
//1.获取用户的输入 输入一个十六进制的字符串
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个非负十六进制整数");
String hex = scanner.nextLine();
//2.创建一个栈 存储每一个字符
ArrayStack<Character> stack = new ArrayStack<>();
//3.将字符串中的字符依次进栈
for(int i = 0; i < hex.length(); i++){
stack.push(hex.charAt(i));
}
//4.依次弹栈,并累加计算结果
int sum = 0;
int exponent = 0; //幂数
char c; //定义弹出元素c
while(!stack.isEmpty()){
c = stack.pop();
sum += getNumber(c) * Math.pow(16,exponent);
exponent++;
}
System.out.println(sum);
}
public static int getNumber(char c){
//合法的范围 '0' - '9' || 'A' - 'F'
//验证字符是否合法
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;
}
}
运行结果