当前位置:   article > 正文

蓝桥杯java基础练习:十六进制转十进制_java十六进制转十进制为什么要从第二位

java十六进制转十进制为什么要从第二位

蓝桥杯java基础练习:十六进制转十进制

问题描述
  从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
  注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535

解:
F的十进制为15,
65535=
15×16³+
15×16²+
15×16+
15×1

有了这个式子,就可以利用循环来实现进制转换

十六进制转十进制的规律:
若字符≤‘9’,则
十进制=第i位数-‘0’+16^(i-1);
若字符≥‘A’,则
十进制=第i位数-‘A’+10+16^(i-1);

用代码来看会更清晰:

//≥'A'
dec += (d[i] - 'A' + 10) * Math.pow(16,len - 1 - i);
//≤'9'
dec += (d[i] - '0') * Math.pow(16,len - 1 - i);
  • 1
  • 2
  • 3
  • 4

(d[i] - ‘A’ + 10)代表字符对应的十进制值,
例如F的ASCII码为70,A为65,则F对应的十进制为70-65+10=15
通过循环即可进行转化。

注:题目要求不超过8位的字符串,所以不应该用int,而是long

public class test {
	public static void main(String args[]) {
		Scanner input = new Scanner(System.in);
		String sc = input.nextLine();
		char d[] = sc.toCharArray();//将字符串转换为字符数组
		int len = d.length;
		long dec = 0;//题目条件的不超过8为的字符串,所以格式应该是long
		input.close();
		for(int i = 0;i < len;i++) {
			if(d[i] >= 'A') {
				dec += (d[i] - 'A' + 10) * Math.pow(16,len - 1 - i);
			}else {
				dec += (d[i] - '0') * Math.pow(16,len - 1 - i);
			}
		}
		System.out.printf("%d", dec);
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

如果用java中自带的函数就会很简单,但好像在考试中行不通

public class test {
	public static void main(String args[]) {
		Scanner input = new Scanner(System.in);
		BigInteger bi = null;
		String enter = null;
		enter = input.next();
		bi = new BigInteger(enter,16);
		String show = bi.toString(10);
		System.out.println(show);
		Integer.valueOf("FFFF",16).toString();
	}
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

BigInteger: 任意大的整数,原则上是,只要你的计算机的内存足够大,可以有无限位的

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/226672
推荐阅读
相关标签
  

闽ICP备14008679号