flag
蓝桥杯第11天
题目介绍
问题描述
十六进制数是在程序设计时经常要使用到的一种整数的表示方式。它有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
思路
其实十进制转其他进制都有通用的思路,先找到转换后有几位,这个可以通过循环找到,比如16^ 2 <257<16^3,那我们就可以知道转换后的十六进制数就是三位,要注意取等
再通过相除取余依次得到十六进制各位的值
用hashmap存储键值对
代码
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
long n=input.nextLong();
if(n==0)
System.out.println("0");
int x=0;//16进制位数
while(Math.pow(16, x)<=n) {
x++;
}
String res="";
Map<Integer,Character>map=new HashMap<>();
map.put(0,'0');
map.put(1,'1');
map.put(2,'2');
map.put(3,'3');
map.put(4,'4');
map.put(5,'5');
map.put(6,'6');
map.put(7,'7');
map.put(8,'8');
map.put(9,'9');
map.put(10,'A');
map.put(11,'B');
map.put(12,'C');
map.put(13,'D');
map.put(14,'E');
map.put(15,'F');
long mod=n;
for(int i=x-1;i>=0;i--) {
int temp=(int)(mod/Math.pow(16,i));
res=res+String.valueOf(map.get(temp));
mod-=temp*Math.pow(16, i);
}
System.out.println(res);
}
}