题目描述
写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 )
输入描述:
输入一个十六进制的数值字符串。
输出描述:
输出该数值的十进制字符串。
输入例子:
0xA
输出例子:
10
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int num=0;
while(sc.hasNext()){
String str=sc.nextLine();
System.out.println(hex16ToDec10(str));
}
sc.close();
}
//0x62A3>>>6*16^3+2*16^2+'A'*16^1+3*16^0
//>> 6*16+2 >>(6*16+2)*16+'A' >>((6*16+2)*16+'A')*16+3
//即每次乘以16进制后令其为一个值,再不断加上下个数乘以16
public static int hex16ToDec10(String str){
//前面有0x,所以要从i=2开始
int result=0;
int BASE=16;
for(int i=2;i<str.length();i++){
//因为指定位的数可能是'A'-'F'或者,要转化为数字以便计算
result=result*BASE+hexToNum(str.charAt(i));
}
return result;
}
//将字符串转化为数字
public static int hexToNum(char ch){
int chNum=0;
if(ch>='0' && ch<='9'){
chNum=ch-'0';
}else if(ch>='A' && ch<='F'){
chNum=ch-'A'+10;
}else{
return 0;//输入无效字符
}
return chNum;
}
}