16进制转10进制
题目
写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。
数据范围:保证结果在 \(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);
}
}