Day9:进制转换

114 阅读1分钟

描述

写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。

数据范围:保证结果在 1 \le n \le 2^{31}-1 \1≤n≤231−1 

输入描述:

输入一个十六进制的数值字符串。

输出描述:

输出该数值的十进制字符串。不同组的测试用例用\n隔开。 题源:进制转换_牛客题霸_牛客网 (nowcoder.com)

示例1

输入:

0xAA

输出:

170

思路:16进制会出现A-F的字符和0-9的字符,需要分别讨论,0-9只需要减去他们本身就可以得到相应的值;A-F需要减去55能得到相应十六进制的值;然后用substring()把“0x”十六进制标识符截取掉;


import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println(f(sc.next()));
        }
    static int f(String n){
        double ans = 0;
         String temp = n.substring(2,n.length());
         char tep[] = temp.toCharArray();
        for (int i = tep.length-1; i >= 0;i--){
           ans += tep[i] >='0' && tep[i] <='9' ? (tep[i] -'0')* Math.pow(16,Math.abs(tep.length-1-i)) : (tep[i] - 55)* Math.pow(16,Math.abs(tep.length-1-i));
        }
        return (int)ans;
    }
}

时间复杂度:O(n); 小结:遍历字符串;依次相加。