/* 基础练习 十六进制转八进制 问题描述 给定n个十六进制正整数,输出它们对应的八进制数。 输入格式 输入的第一行为一个正整数n (1<=n<=10)。 接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。 输出格式 输出n行,每行为输入对应的八进制正整数。 【注意】 输入的十六进制数不会有前导0,比如012A。 输出的八进制数也不能有前导0。 样例输入 2 39 123ABC 样例输出 71 4435274 【提示】 先将十六进制数转换成某进制数,再由某进制数转换成八进制。 */ import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); int n = input.nextInt(); String a[] = new String[n]; for (int i = 0; i < n; i++) { a[i] = input.next(); } input.close(); for (int i = 0; i < a.length; i++) { String s = a[i]; String ss = toHex(s); if (ss.length() % 3 == 1) { ss = "00" + ss; } if (ss.length() % 3 == 2) { ss = "0" + ss; } System.out.println(toOct(ss)); } } public static String toHex(String str) { StringBuffer hexstr = new StringBuffer(); for (int i = 0; i < str.length(); i++) { char indexchar = str.charAt(i); switch (indexchar) { case '0': hexstr.append("0000"); break; case '1': hexstr.append("0001"); break; case '2': hexstr.append("0010"); break; case '3': hexstr.append("0011"); break; case '4': hexstr.append("0100"); break; case '5': hexstr.append("0101"); break; case '6': hexstr.append("0110"); break; case '7': hexstr.append("0111"); break; case '8': hexstr.append("1000"); break; case '9': hexstr.append("1001"); break; case 'A': hexstr.append("1010"); break; case 'B': hexstr.append("1011"); break; case 'C': hexstr.append("1100"); break; case 'D': hexstr.append("1101"); break; case 'E': hexstr.append("1110"); break; case 'F': hexstr.append("1111"); break; default: break; } } return hexstr.toString(); } public static String toOct(String str) { StringBuffer octstr = new StringBuffer(); int len = str.length(); int m = len % 3; int k = 0; if (str.substring(0, 3).equals("000")) { k = 3; } for (int i = k; i < str.length() - 2; i += 3) { String s = str.substring(i, i + 3); switch (s) { case "000": octstr.append("0"); break; case "001": octstr.append("1"); break; case "010": octstr.append("2"); break; case "011": octstr.append("3"); break; case "100": octstr.append("4"); break; case "101": octstr.append("5"); break; case "110": octstr.append("6"); break; case "111": octstr.append("7"); break; default: break; } } return octstr.toString(); } }