蓝桥杯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);

(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);
	}
}

如果用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();
	}
}

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

你可能感兴趣的:(蓝桥,Java,算法)