藍橋杯java基礎練習:十六進制轉十進制
問題描述
從鍵盤輸入一個不超過8位的正的十六進制數字元串,将它轉換為正的十進制數後輸出。
注:十六進制數中的10~15分别用大寫的英文字母A、B、C、D、E、F表示。
樣例輸入
FFFF
樣例輸出
65535
解:
F的十進制為15,
65535=
15×16³+
15×16²+
15×16+
15×1
有了這個式子,就可以利用循環來實作進制轉換
十六進制轉十進制的規律:
若字元≤‘9’,則
十進制=第i位數-‘0’+16^(i-1);
若字元≥‘A’,則
十進制=第i位數-‘A’+10+16^(i-1);
用代碼來看會更清晰:
//≥'A'
dec += (d[i] - 'A' + 10) * Math.pow(16,len - 1 - i);
//≤'9'
dec += (d[i] - '0') * Math.pow(16,len - 1 - i);
(d[i] - ‘A’ + 10)代表字元對應的十進制值,
例如F的ASCII碼為70,A為65,則F對應的十進制為70-65+10=15
通過循環即可進行轉化。
注:題目要求不超過8位的字元串,是以不應該用int,而是long
public class test {
public static void main(String args[]) {
Scanner input = new Scanner(System.in);
String sc = input.nextLine();
char d[] = sc.toCharArray();//将字元串轉換為字元數組
int len = d.length;
long dec = 0;//題目條件的不超過8為的字元串,是以格式應該是long
input.close();
for(int i = 0;i < len;i++) {
if(d[i] >= 'A') {
dec += (d[i] - 'A' + 10) * Math.pow(16,len - 1 - i);
}else {
dec += (d[i] - '0') * Math.pow(16,len - 1 - i);
}
}
System.out.printf("%d", dec);
}
}
如果用java中自帶的函數就會很簡單,但好像在考試中行不通
public class test {
public static void main(String args[]) {
Scanner input = new Scanner(System.in);
BigInteger bi = null;
String enter = null;
enter = input.next();
bi = new BigInteger(enter,16);
String show = bi.toString(10);
System.out.println(show);
Integer.valueOf("FFFF",16).toString();
}
}
BigInteger: 任意大的整數,原則上是,隻要你的計算機的記憶體足夠大,可以有無限位的