【蓝桥杯】基础练习⼗六进制转⼗进制(Java实现)
分析:
⽅法⼀,⼗六进制转换成⼗进制的基本原理是按数位依次操作,将每⼀位依次展开乘以权值再求和。
⽅法⼆,由于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) ⽅法也是可以的。
Java代码实现:
⽅法⼀:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String string = Line();
char c[]=CharArray(); //将字符串对象中的字符转换为⼀个字符数组
//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 = Line();
System.out.print(Long.valueOf(string,16));
}
}
⽅法三:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
java valueofScanner scanner = new Scanner(System.in);
String string = Line();
System.out.print(Long.parseLong(string, 16));
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论