蓝桥杯——基础练习——BASIC-12——十六进制转八进制

我的蓝桥杯代码仓:https://github.com/617076674/lanqiao

题目描述:

蓝桥杯——基础练习——BASIC-12——十六进制转八进制_第1张图片

知识点:进制转换

思路:先将十六进制转换成二进制,再将二进制转换成八进制

为防止超时,用一个数组来保存十六进制和二进制间的对应关系,用一个哈希表来保存二进制和八进制间的对应关系。

由于在二进制转八进制的过程中,为方便处理,我将字符串翻转了,所以哈希表中存储的是逆序的二进制序列和其对应的八进制值。由于翻转后会存在字符串末端不足3位的情况,因此哈希表中的键需要包含2个字符及1个字符的二进制序列。

JAVA代码:

import java.util.HashMap;
import java.util.Scanner;

public class Main {
	private static String[] hexToBinary = {"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111",
			"1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"};
	private static HashMap binaryToOct;	//存储逆序的2进制序列和对应的8进制值
	static {
		binaryToOct = new HashMap();
		binaryToOct.put("000", "0");
		binaryToOct.put("100", "1");
		binaryToOct.put("010", "2");
		binaryToOct.put("110", "3");
		binaryToOct.put("001", "4");
		binaryToOct.put("101", "5");
		binaryToOct.put("011", "6");
		binaryToOct.put("111", "7");
		binaryToOct.put("00", "0");
		binaryToOct.put("10", "1");
		binaryToOct.put("01", "2");
		binaryToOct.put("11", "3");
		binaryToOct.put("0", "0");
		binaryToOct.put("1", "1");
	}
	public static void main(String[] args) throws Exception {
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		scanner.nextLine();
		for(int i = 0; i < n; i++) {
			System.out.println(toOct(toBinary(scanner.nextLine())));
		}
	}
	
	private static String toBinary(String s) {
		StringBuilder result = new StringBuilder();
		for(int i = 0; i < s.length(); i++) {
			char c = s.charAt(i);
			if(c >= 'A' && c <= 'F') {
				result.append(hexToBinary[c - 'A' + 10]);
			}else {
				result.append(hexToBinary[c - '0']);
			}
		}
		while(result.charAt(0) == '0') {	//删除前导0
			result.deleteCharAt(0);
		}
		return result.toString();
	}
	
	private static String toOct(String s) {
		StringBuilder result = new StringBuilder();
		StringBuilder input = new StringBuilder(s);
		input.reverse();
		for(int i = 0; i < input.length(); i += 3) {
			result.append(binaryToOct.get(input.substring(i, Math.min(i + 3, input.length()))));
		}
		return result.reverse().toString();
	}
}

JAVA解题报告:

 

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