进制转换-华为
进制转换
链接:https://www.nowcoder.com/questionTerminal/8f3df50d2b9043208c5eed283d1d4da6?pos=133&orderByHotValue=1
来源:牛客网
写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。(多组同时输入 )
输入
0xA
输出
10
解题思路
用Integer的decode方法:
将String解码为Integer 。 接受给出的十进制,十六进制和八进制数
public class 华为_进制转换 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()) {
String str = sc.nextLine();
Integer num = Integer.decode(str);
System.out.println(num);
}
}
}
前两天又做了一遍,get了新的解法。
十六进制:09对应10进制的09
AF对应10进制的1015
逢16进1
所以可以自己写一个转换方法,将A~F转换为对应的十进制数字,在根据十六进制表示方法来计算。
十进制数字除以16取余,再从下到上读取就是十六进制数了。
如:1765->十六进制
1765/16 = 110 ··· 余5
110/16 = 6 ··· 余14
6/16 = 0 ··· 余6
所以十六进制数为6E5
相应的,十六进制转十进制,x16^(n-1) + y16^(n-1)+... n = 从左到右字符的第几位(从1开始)
616^2 + 1416^1 + 5*16^0 = 1765
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String r = null;
if(sc.hasNext()){
r = sc.next();
}
r = r.trim();
int result = 0;
String[] list = r.split("");
int len = list.length;
for (int i = 0; i < list.length; i++) {
int temp = sixteenToTen(list[i]);
result += temp * Math.pow(16,len-1);
len--;
}
System.out.println(result);
}
private static int sixteenToTen(String s){
s = s.trim();
if(Pattern.matches("\\d",s)){
return Integer.valueOf(s);
}else{
switch (s) {
case "A": return 10;
case "B": return 11;
case "C": return 12;
case "D": return 13;
case "E": return 14;
case "F": return 15;
default:return 0;
}
}
}

浙公网安备 33010602011771号