【藍橋杯】基礎練習 十六進位制轉十進位制
阿新 • • 發佈:2018-12-21
問題描述
從鍵盤輸入一個不超過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));
}
}