問題描述
從鍵盤輸入一個不超過8位的正的十六進制數字符串,將它轉換爲正的十進制數後輸出。
注:十六進制數中的10~15分別用大寫的英文字母A、B、C、D、E、F表示。
樣例輸入
FFFF
樣例輸出
65535
分析:
根據數電所學的進制轉換將十六進制轉化爲十進制直接採用展開法。
以16爲基數,當前的位數減1爲冪,再乘以當前位所在的值。從最高位開始,直至最後一位,所有計算後的值的和,即爲轉換後的十進制數。
例:(2AF)h=2 x 16^2 +10 x 16^1 +15 x 16^0 =687
代碼:
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
char[] c = s.toCharArray();
int n=c.length;
int m=0;
long sum=0;
for (int i=0;i<n;i++){
if (c[i] == 'A')
m = 10;
else if (c[i] == 'B')
m = 11;
else if (c[i] == 'C')
m = 12;
else if (c[i] == 'D')
m = 13;
else if (c[i] == 'E')
m = 14;
else if (c[i] == 'F')
m = 15;
else
m = Integer.parseInt(c[i]+"");//若不是字母,則將字符轉成整數形式給m
sum+= m*(Math.pow(16,n-i-1));//取16的(n-i-1)次冪乘以m
}
System.out.println(sum);
}
}