描述
写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。
数据范围:保证结果在 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); 小结:遍历字符串;依次相加。