1. 程式人生 > >【藍橋杯】基礎練習 十六進位制轉十進位制

【藍橋杯】基礎練習 十六進位制轉十進位制

問題描述

  從鍵盤輸入一個不超過8位的正的十六進位制數字符串,將它轉換為正的十進位制數後輸出。
  注:十六進位制數中的10~15分別用大寫的英文字母A、B、C、D、E、F表示。

樣例輸入

FFFF

樣例輸出

65535

解題思路:

對於A-F,先轉換成相應的十進位制數字,然後再乘以數位(16的len-i-1次冪),對於0-9,則直接乘以數位即可。

這裡有個坑,如果把sum定義為int型別的整數的話會超出範圍,所以sum應該定義為long型別

import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext()){
			String s = sc.nextLine();
			int len = s.length();//用來輔助確定冪的次數
			long sum=0;//用來儲存結果
			for(int i=0;i<len;i++){
				//對每個字元進行判斷
				if(s.charAt(i) == 'F'){
					sum += 15 * Math.pow(16, len-i-1);
				} else if(s.charAt(i)=='E'){
					sum += 14 * Math.pow(16, len-i-1);
				} else if(s.charAt(i)=='D'){
					sum += 13 * Math.pow(16, len-i-1);
				} else if(s.charAt(i)=='C'){
					sum += 12 * Math.pow(16, len-i-1);
				} else if(s.charAt(i)=='B'){
					sum += 11 * Math.pow(16, len-i-1);
				} else if(s.charAt(i)=='A'){
					sum += 10 * Math.pow(16, len-i-1);
				} else {
					sum += (s.charAt(i)-'0') * Math.pow(16, len-i-1);
				}
			}
			System.out.println(sum);
			
		}
	}
}

當然,也可以直接使用java中的類庫來實現

import java.util.Scanner;
public class SixTeenChageTen {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String s = sc.nextLine();
		System.out.println(Long.parseLong(s, 16));
	}
}