问题描述
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535
资源限制
时间限制:1.0s 内存限制:512.0MB
解题思路:
1,使用字符串类接收用户输入的十六进制数。2,定义两个数组,一个是字符数组:用于将字符串转化为字符;第二个是整型数组,用于将字符数组的字符转化为整型。3,然后在定义一个变量sum,用于累加十六进制的每位数字的和。4,定义一个变量sixteen,用于表示对应权位上16的n次方大小。5,分别判断十六进制字符串中的每位字符是不是字母,如果是字母,就把字母转化为数字放在整型数组中,然后再乘以对应权位的16的n次方;如果是数字,操作类似!
如何把十六进制转化为十进制?

验证:

百度里的进制转化工具(点击查看)
代码块:
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String str = sc.next();
f(str);
}
static void f(String s){
int len = s.length();//字符串长度
char[]c = s.toCharArray();//字符数组
long[]a = new long[len];//定义长整型数组,防止超出数据范围
long sum = 0L;//累加每位十六进制的和
for(int i = len-1; i >= 0; i--){
//定义十六进制的权位
long sixteen = 1;
for(int j = 1; j < len-i; j++){
sixteen *= 16;
}
//判断十六进制中的字符是否是字母
if(c[i] >= 'A' && c[i] <= 'Z'){
a[i] = c[i]-55;
sum += a[i]*sixteen;
}else{
a[i] = c[i]-48;
sum += a[i]*sixteen;
}
}
System.out.println(sum);
}
}
评测结果:

PS:
最后再ps一下(虽然不知道ps是什么意思,但是看其他的blogs里都是用ps添加说明,所以……),这题主要需要注意字符转化对应的数字时,需要减48(如果字符是数字)/减55(如果字符是字母),至于为什么要减,那就百度搜索ASCII码表
该博客介绍了一种使用Java将不超过8位的正十六进制数字符串转换为正十进制数的方法。通过接收用户输入,将字符串转化为字符数组,再将字符转换成整型,结合16的幂进行累加计算。关键在于处理字母字符时需减去48(数字字符的ASCII偏移量)或55(字母字符的ASCII偏移量)。提供的样例输入和输出展示了转换过程。

2206

被折叠的 条评论
为什么被折叠?



