问题描述
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
我的答案:(测评满分)
import java.util.Scanner;
public class Main {
static int a[]= {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
static int hextod(String str) {
int result=0;;
switch(str) {
case "0":result=a[0];
break;
case "1":result=a[1];
break;
case "2":result=a[2];
break;
case "3":result=a[3];
break;
case "4":result=a[4];
break;
case "5":result=a[5];
break;
case "6":result=a[6];
break;
case "7":result=a[7];
break;
case "8":result=a[8];
break;
case "9":result=a[9];
break;
case "A":result=a[10];
break;
case "B":result=a[11];
break;
case "C":result=a[12];
break;
case "D":result=a[13];
break;
case "E":result=a[14];
break;
case "F":result=a[15];
break;
default:break;
}
return result;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
if(str.length()>8) {
return;
}
if(str.startsWith("-")) {
return;
}
int start = 0;
int end = 1;
long result=0;
String st ="";
for(int i=0;i<str.length();i++) {
st = str.substring(start,end);
start++;
end++;
result+=Math.pow(16, str.length()-i-1)*hextod(st);
}
System.out.println(result);
}
}
其中,result的声明必须是long,不能是int,不然不是满分,因为如果是int,输出的值可能就超范围了。