题目描述:写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串(注意可能存在的一个测试用例里的多组数据)。
输入描述:输入一个十六进制的数值字符串。
输出描述:输出该数值的十进制字符串。
思路:
1)接收十六进制的字符串,只截取后面的部分(除0x之后的字符串),然后对子串进行处理。
2)先创建一个HashMap,用来存储每个字符对应的数字(0~15分别对应0~9和a~f)。
3)遍历子串,分别取出每个字符,依次将字符对应的值与相应的基数相乘。累加计和。
4)最后返回结果。
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
String str=sc.next();
String substr=str.substring(2,str.length());
int res=getRadix(substr);
System.out.println(res);
}
}
private static int getRadix(String str){
Map<Character,Integer> map=new HashMap<>();
map.put('0',0);
map.put('1',1);
map.put('2',2);
map.put('3',3);
map.put('4',4);
map.put('5',5);
map.put('6',6);
map.put('7',7);
map.put('8',8);
map.put('9',9);
map.put('A',10);
map.put('B',11);
map.put('C',12);
map.put('D',13);
map.put('E',14);
map.put('F',15);
int res=0;
int j=0;
for(int i=str.length()-1;i>=0;i--){
char c=str.charAt(i);
double tar=map.get(c)*Math.pow(16,j);
res=res+(int)tar;
j++;
}
return res;
}
}