天天看點

藍橋杯java基礎練習:十六進制轉十進制

藍橋杯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: 任意大的整數,原則上是,隻要你的計算機的記憶體足夠大,可以有無限位的