十进制转十六进制java

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);
        

	}

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章