试题 基础练习 十六进制转十进制

该博客介绍了一种使用Java将不超过8位的正十六进制数字符串转换为正十进制数的方法。通过接收用户输入,将字符串转化为字符数组,再将字符转换成整型,结合16的幂进行累加计算。关键在于处理字母字符时需减去48(数字字符的ASCII偏移量)或55(字母字符的ASCII偏移量)。提供的样例输入和输出展示了转换过程。

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值