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