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


/*問題描述

  從鍵盤輸入一個不超過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  }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM