藍橋杯 練習 Java 十六進位制轉八進位制
阿新 • • 發佈:2019-02-20
第一次寫部落格,有不足之處還請大家多指正
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int num = scanner.nextInt(); String[] ss = new String[num]; for (int i = 0; i < ss.length; i++) { ss[i] = scanner.next(); } scanner.close(); for (String string : ss) { System.out.println(binToOct(hexToBin(string))); } } private static String hexToBin(String value) { // value:單個十六進位制數的字串 char[] c = value.toCharArray(); StringBuffer stringBuffer = new StringBuffer(); for (int i = 0; i < c.length; i++) { stringBuffer.append(toBinTable(c[i])); } return stringBuffer.toString(); } // 二進位制轉八進位制時 三對一 有三種情況,但當value.length()%3==0時無需補0 private static String binToOct(String value) { // value:單個二進位制數的字串 StringBuffer stringBuffer = new StringBuffer(); if (value.length() % 3 == 1) { value = "00" + value; } else if (value.length() % 3 == 2) { value = "0" + value; } for (int i = 0; i < value.length(); i += 3) { String temp = value.substring(i, i + 3); stringBuffer.append(ToOtcTable(temp)); } // 刪除八進位制數前面多餘的0 char[] c = stringBuffer.toString().toCharArray(); for (int i = 0; i < 2; i++) { if (c[i] == '0') { stringBuffer.delete(i, i + 1); } } return stringBuffer.toString(); } static String toBinTable(char c) { StringBuffer stb = new StringBuffer(); switch (c) { case '0':stb.append("0000");break; case '1':stb.append("0001");break; case '2':stb.append("0010");break; case '3':stb.append("0011");break; case '4':stb.append("0100");break; case '5':stb.append("0101");break; case '6':stb.append("0110");break; case '7':stb.append("0111");break; case '8':stb.append("1000");break; case '9':stb.append("1001");break; case 'A':stb.append("1010");break; case 'B':stb.append("1011");break; case 'C':stb.append("1100");break; case 'D':stb.append("1101");break; case 'E':stb.append("1110");break; case 'F':stb.append("1111");break; default:break; } return stb.toString(); } static String ToOtcTable(String value) { StringBuffer stb = new StringBuffer(); switch (value) { case "000":stb.append("0");break; case "001":stb.append("1");break; case "010":stb.append("2");break; case "011":stb.append("3");break; case "100":stb.append("4");break; case "101":stb.append("5");break; case "110":stb.append("6");break; case "111":stb.append("7");break; default:break; } return stb.toString(); } }