前言
经过前期的数据结构和算法学习,开始以OD机考题作为练习题,继续加强下熟练程度。
描述
写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。
数据范围:保证结果在 1≤𝑛≤231−1 1≤n≤231−1
输入描述:
输入一个十六进制的数值字符串。
输出描述:
输出该数值的十进制字符串。不同组的测试用例用\n隔开。
示例1
输入:
0xAA
输出:
170
实现原理与步骤
十六进制个十百位对应的数字大小为16的0、1、2次方。按这个规则计算对应位置值并相加即可。
实现代码
内存溢出版本,未能通过所有用例。
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
String str=in.nextLine();
int res=0;
for(int i=str.length()-1;i>1;i--){
char c=str.charAt(i);
if(c>='0'&&c<='9'){
res+=(c-'0')*Math.pow(16, str.length()-1-i);//
}else{
int temp=(c-'A')+10;
res+=temp*Math.pow(16, str.length()-1-i);
}
}
System.out.println(res);
}
}