赞
踩
分析:
方法一,十六进制转换成十进制的基本原理是按数位依次操作,将每一位依次展开乘以权值再求和。
方法二,由于Java中没有格式化输入,只能把给定的十六进制数读取当做一个字符串读取到一个字符串变量中,然后通过Java中自带的进制转换函数将读取的十六进制数转换成十进制数输出。
使用Java特性的的Long.valueOf(String s, int radix) 方法,注意这块需要Long,因为Int的范围已经不够了。API文档中该方法的解释如下:
总结:当字符串变量s为一串r进制数字序列时,可以利用Integer.valueOf(s,r)函数将其转换为十进制int型整数,利用Long.valueOf(s,r)函数将其转换为十进制long型整数。
方法三,后面发现Long.parseLong(String s, int radix) 方法也是可以的。
方法一:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String string = scanner.nextLine(); char c[]=string.toCharArray(); //将字符串对象中的字符转换为一个字符数组 //int sum = 0; long sum = 0; //数据范围上,不超过8位的十六进制数,所以计算总和的sum应该声明为long型,而不是int型,否则会出错。 int n = c.length; for (int i = 0; i < n; i++) { if((int)c[i]-48>9){ if(c[i]=='A') sum+=10*Math.pow(16,n-i-1); else if(c[i]=='B') sum+=11*Math.pow(16,n-i-1); else if(c[i]=='C') sum+=12*Math.pow(16,n-i-1); else if(c[i]=='D') sum+=13*Math.pow(16,n-i-1); else if(c[i]=='E') sum+=14*Math.pow(16,n-i-1); else if(c[i]=='F') sum+=15*Math.pow(16,n-i-1); } else{ sum+=((int)c[i]-48)*Math.pow(16,n-i-1); } } System.out.println(sum); } }
本题需要注意的地方是sum应该声明为long型,而不是int型,否则会出错。数据范围上,不超过8位的十六进制数,转换之后超出了int型的取值范围了。(int表示有符号数为-2147483648到2147483647,FFFFFFFF会超了)
方法二:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String string = scanner.nextLine();
System.out.print(Long.valueOf(string,16));
}
}
方法三:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String string = scanner.nextLine();
System.out.print(Long.parseLong(string, 16));
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。