问题描述
十六进制数是在程序设计时经常要使用到的一种整数的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个符号,分别表示十进制数的0至15。十六进制的计数方法是满16进1,所以十进制数16在十六进制中是10,而十进制的17在十六进制中是11,以此类推,十进制的30在十六进制中是1E。
给出一个非负整数,将它表示成十六进制的形式。
输入格式
输入包含一个非负整数a,表示要转换的数。0<=a<=2147483647
输出格式
输出这个整数的16进制表示
样例输入
30
样例输出
1E
问题分析
本题使用两种方法。
- 使用java内置进制转换。由于a的范围较大,使用long类型接受输入数据,再用toHexString进行向16进制的转换。
- 由于进制的转换过程是把余数一个一个求出来然后倒着输出,换言之,先求出的余数后输出,后求出的余数先输出,屏幕前的你一定想到了什么… 诶没错——栈结构。
方法一
import java.util.Locale;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner read = new Scanner(System.in);
long nextLong = read.nextLong();
String res = Long.toHexString(nextLong);
//注意转换成大写的字母
System.out.println(res.toUpperCase(Locale.ROOT));
}
}
方法二
import java.util.Scanner;
import java.util.Stack;
public class Main {
public static void main(String[] args) {
Scanner read = new Scanner(System.in);
int n = read.nextInt();
Stack<Character> stack = new Stack<Character>();
char []a = new char[]{'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
if (n == 0) {
System.out.println(0);
}
while(n!=0){
int m = n % 16;
stack.add(a[m]);
n = n / 16;
}
while(stack.isEmpty() == false){
System.out.printf(String.valueOf(stack.pop()));
}
}
}