問題描述
從鍵盤輸入一個不超過8位的正的十六進制數字符串,將它轉換為正的十進制數后輸出。
注:十六進制數中的10~15分別用大寫的英文字母A、B、C、D、E、F表示。
樣例輸入
FFFF
樣例輸出
65535
分析
本題不可以用integer自帶的方法轉,因為8個F會超出界限,報出NumberFormatException異常,所以需要用其他方法,本題思路,高位*16+低位,直到到個位
~~~
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
String str = input.next();
String a[] = new String[str.length()];
for (int i = 0; i < str.length(); i++) {
switch (str.charAt(i)) {
case '1':
a[i] = "1";
break;
case '2':
a[i] = "2";
break;
case '3':
a[i] = "3";
break;
case '4':
a[i] = "4";
break;
case '5':
a[i] = "5";
break;
case '6':
a[i] = "6";
break;
case '7':
a[i] = "7";
break;
case '8':
a[i] = "8";
break;
case '9':
a[i] = "9";
break;
case 'A':
a[i] = "10";
break;
case 'B':
a[i] = "11";
break;
case 'C':
a[i] = "12";
break;
case 'D':
a[i] = "13";
break;
case 'E':
a[i] = "14";
break;
case 'F':
a[i] = "15";
break;
default:
a[i] = "0";
break;
}
}
BigInteger bigInteger = new BigInteger(a[0]);
BigInteger bigInteger2 = new BigInteger("16");
for (int i = 1; i < a.length; i++) {
bigInteger = bigInteger.multiply(bigInteger2).add(new BigInteger(a[i]));
}
System.out.println(bigInteger);
}
}
~~~
備注:還可以用二進制串的方法