/*問題描述
從鍵盤輸入一個不超過8位的正的十六進制數字符串,將它轉換為正的十進制數后輸出。
注:十六進制數中的10~15分別用大寫的英文字母A、B、C、D、E、F表示。
樣例輸入
FFFF
樣例輸出
65535*/
心得:
一開始忘記了十六進制轉十進制的原理,便無從下手。后來去百度了一下:它是按數位依次操作,每個數位將前面的數乘16的數位次方,再將當前各數位的值相加.
例如:
本題也有陷阱,也是出在數據范圍上,不超過8位的十六進制數,所以計算總和的sum應該聲明為long型,而不是int型,否則會出錯。
1 import java.util.*; 2 public class Main { 3 public static void main (String args[]){ 4 Scanner sc=new Scanner(System.in); 5 String s=sc.nextLine(); 6 char c[]=s.toCharArray(); //將字符串對象中的字符轉換為一個字符數組 7 int n=c.length; 8 long sum=0; 9 //long型的取值范圍:-9223372036854775808~9223372036854775807 10 for(int i=0;i<n;i++){ 11 if((int)c[i]-48>9){ 12 if(c[i]=='A') 13 sum+=10*Math.pow(16,n-i-1); 14 else if(c[i]=='B') 15 sum+=11*Math.pow(16,n-i-1); 16 else if(c[i]=='C') 17 sum+=12*Math.pow(16,n-i-1); 18 else if(c[i]=='D') 19 sum+=13*Math.pow(16,n-i-1); 20 else if(c[i]=='E') 21 sum+=14*Math.pow(16,n-i-1); 22 else if(c[i]=='F') 23 sum+=15*Math.pow(16,n-i-1); 24 } 25 else{ 26 sum+=((int)c[i]-48)*Math.pow(16,n-i-1); 27 } 28 } 29 System.out.println(sum); 30 } 31 }