flag
蓝桥杯第二天
题目
问题描述
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535
代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
String str=scanner.next();
System.out.println(HexaToDec(str));
}
public static long HexaToDec(String s) {
int x=s.length();
long res=0;
for(int i=0;i<x;i++) {
if(s.charAt(i)=='A') {
res+=Math.pow(16, x-i-1)*10;
}
else if(s.charAt(i)=='B') {
res+=Math.pow(16, x-i-1)*11;
}
else if(s.charAt(i)=='C') {
res+=Math.pow(16, x-i-1)*12;
}
else if(s.charAt(i)=='D') {
res+=Math.pow(16, x-i-1)*13;
}
else if(s.charAt(i)=='E') {
res+=Math.pow(16, x-i-1)*14;
}
else if(s.charAt(i)=='F') {
res+=Math.pow(16, x-i-1)*15;
}
else {
String a=String.valueOf(s.charAt(i));
res+=Math.pow(16, x-i-1)*Integer.parseInt(a);
}
}
return res;
}
}
tip
注意十进制数可能超过八位,因此要用long