进制转换-华为

进制转换

链接: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;
            }
        }
    }
posted @ 2020-06-11 14:48  方西西  阅读(536)  评论(0)    收藏  举报