蓝桥杯 之 基础练习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  }

 

posted @ 2015-01-28 21:47  beckljm1  阅读(4798)  评论(0编辑  收藏  举报