/*问题描述
从键盘输入一个不超过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 }