十進制轉十六進制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);
        

	}

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