155 字 少于 1 分钟阅读

题目

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

数据范围:保证结果在 \(1 ≤ n ≤ 2^31 - 1\)

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

输出描述: 输出该数值的十进制字符串。

示例1:

输入:0xAA
输出:170

解法

16进制转成10进制的过程为:\(n = x_n * 16^n + x_{n-1} * 16^{n-1} + ... + x_1 * 16^1 + x_0 * 16^0\)

public class Solution {

    public int trans(String input) {

        int res = 0;

        for (int i = 0; i < input.length() - 2; i++) {
            //由于前面两位是'0x',故从第三位开始
            char tc = input.charAt(i + 2);
            int t = 0;    //记录字母转换成的数值
            //将字母转换为数值
            if (tc >= '0' && tc <= '9')
                t = tc - '0';
                //字母'A'/'a'~'F''f'对应数字10~15
            else if (tc >= 'A' && tc <= 'F')
                t = tc - 'A' + 10;
            else if (tc >= 'a' && tc <= 'f')
                t = tc - 'a' + 10;
            //计算加和
            res += t * Math.pow(16, input.length() - i - 3);
        }
        return res;
    }

}

借助 Integer.parseInt 直接做进制转换

public class Solution {
    public int trans(String input) {
        return Integer.parseInt(s.substring(2, input.length()), 16);
    }
}