蓝桥杯练习:十六进制转八进制

在这里插入图片描述
解题思路:本来以为是个简单题,写了个转化为10进制数直接Integer.toOctalString(),没想到直接溢出了,看了一下数据真就用了100000位,改用字符串做,大体思路就是16进制1位展4位2进制,再把2进制3位合1位8进制。
在这里插入图片描述


import java.util.Scanner;

public class Main {
	static char[] H = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
	static String[] HB = { "0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010",
			"1011", "1100", "1101", "1110", "1111" };
	static String[] O = { "0", "1", "2", "3", "4", "5", "6", "7" };

	static String str[];

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		String[] str = new String[n];
		for (int i = 0; i < n; i++) {
			str[i] = sc.next();
		}
		for (int i = 0; i < n; i++) {
			String num = str[i];
			num = HtoB(num);//十六进制转二进制
			num = BtoO(num);//二进制转八进制
			if(num.startsWith("0")) {//去除前导0
				num=num.substring(1);
			}
			System.out.println(num);
		}
	}

	static String HtoB(String str) {
		StringBuffer ss = new StringBuffer() ;
		for (int i = 0; i < str.length(); i++) {
			ss.append(fhb(str.charAt(i)));
		}
		return ss.toString();
	}

	private static String BtoO(String str) {
		int len = str.length();
		//位数不够需补0
		if (len % 3 == 1) {
			str = "00" + str;
			len += 2;
		}
		if (len % 3 == 2) {
			str = "0" + str;
			len += 1;
		}
		StringBuffer ss =new StringBuffer();
		for (int i = 0; i < len; i += 3) {
			ss .append(fbo(str.substring(i, i + 3))) ;
		}
		
		return ss.toString();
	}

	private static String fhb(char ch) {
	//16进制对2进制的映射 f(16进制值)=2进制值
		if (ch >= '0' && ch <= '9') {
			return HB[ch - '0'];
		} else {
			return HB[ch - 'A' + 10];
		}
	}

	private static String fbo(String str) {//2进制对8进制的映射
		switch (str) {
		case "000":
			return O[0];
		case "001":
			return O[1];
		case "010":
			return O[2];
		case "011":
			return O[3];
		case "100":
			return O[4];
		case "101":
			return O[5];
		case "110":
			return O[6];
		case "111":
			return O[7];
		}
		return str;
	}
}
发布了56 篇原创文章 · 获赞 1 · 访问量 2346

猜你喜欢

转载自blog.csdn.net/qq_44467578/article/details/104598236