蓝桥杯试题集-基础练习题-十六进制转十进制(Java)

#做题笔记,仅自己看的懂
题目:

蓝桥杯试题集-基础练习题-十六进制转十进制(Java)_第1张图片
正确姿势一:(通过遍历16进制数各位置对应的十进制值相加得到总值,因数据可能会非常大故采用超大型数据类型bigInteger存储)

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		String str = scanner.next();
		HashMap hashmap = new HashMap();
		hashmap.put('F', 15);
		hashmap.put('E', 14);
		hashmap.put('D', 13);
		hashmap.put('C', 12);
		hashmap.put('B', 11);
		hashmap.put('A', 10);
		int numtmp = 0;
		BigInteger value = new BigInteger("0");// 由于8位FFFFFFFF的值已经超过int的最大范围,使用int必然出错
		// 于是选用超大型数据类型
		BigInteger valuetmp = new BigInteger("0");// valuetmp用于存储中间值
		String bs1 = "";
		for (int j = str.length() - 1; j >= 0; j--) {
			if (str.charAt(j) <= '9') {
				
				valuetmp = BigInteger.valueOf(Integer.parseInt(str.charAt(j) + ""))
						.multiply(BigInteger.valueOf((int) Math.pow(16, numtmp)));
			} else {
				valuetmp = BigInteger.valueOf(hashmap.get(str.charAt(j)))
						.multiply(BigInteger.valueOf((int) Math.pow(16, numtmp)));
				//....BigInteger.valueOf((int) Math.pow(16, numtmp))这里可以用int,
				//即使是算到最后一个F的值,它也在int范围内,只要用int或比int大的类型都行
			}
			value = value.add(valuetmp);
			numtmp++;
		}
		System.out.println(value);

	}

}

正确姿势二:(先通过十六进制转换为二进制,在通过计算转化成十进制值)

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		String str = scanner.next();
		String bs1 = "";
		StringBuilder stringBuilder;// 二进制字符串
		stringBuilder = new StringBuilder();
		for(int j=0;j= 0; En--) {
			valuetmp = Integer.parseInt(stringBuilder.charAt(En) + "") * (long) Math.pow(2, numtmp);
			// ....(long)Math.pow(2, numtmp)这里要用大于int 范围的类型 因为在八位都是F的时候
			// 最后一次计算值很大,如果强转为int将会有轻微失真,会比强转为long时的值小1,这里就是题目最后一个测试用例,
			//如果没有选取合适,最后一个测试用例将过不了,会感觉很奇怪,选取long或超大型数据类型bigIntegr都可得到最后答案
			value = value.add(BigInteger.valueOf(valuetmp));
			numtmp++;
		}
		System.out.println(value);

	}

}

推荐姿势一:安全

你可能感兴趣的:(蓝桥杯试题集)