基础练习 十六进制转八进制

来源:互联网 发布:x教授 知乎 编辑:程序博客网 时间:2024/06/03 21:43





-

------------------------------------------------------------------------------------------------------------------

(基础练习第二题就难住了 QAQ)

这道题的限制比较多,因为最开始说的是十六进制数的长度不超过100000,

而long类型才十九位,肯定不能用系统自带的进制转换方法,需要自己写

------------------------------------------------------------------------------------------------------------------


要注意小细节,十六进制每一位 对应4位二进制数,八进制对应3位二进制数,十六进制生成二进制后,

在转化八进制前,要查看长度是不是三的倍数,如果不是,则用0补齐.之后在转化八进制开始要判断

开头的三个是不是"000"的形式,如果是则不算在八进制数里.



import java.util.Scanner;/* * 将十六进制转化为八进制 * 思路,先将十六进制转化为二进制,然后从为二进制转化为八进制 */public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);int n = scan.nextInt();while (n-- != 0) {String s1 = scan.next().trim();// 将十六进制转化为二进制StringBuilder s2 = changeToEr(s1);// 将二进制转化为八进制StringBuilder s3 = changToOc(s2);System.out.println(s3);}}private static StringBuilder changToOc(StringBuilder s2) {int len = s2.length();StringBuilder s3 = null;if (len % 3 == 0) {s3 = zhixing(s2);} else if (len % 3 == 1) {s2.insert(0, "00");s3 = zhixing(s2);} else {s2.insert(0, "0");s3 = zhixing(s2);}return s3;}private static StringBuilder zhixing(StringBuilder s2) {StringBuilder s3 = new StringBuilder();for (int i = 0; i < s2.length(); i += 3) {String s4 = (String) s2.subSequence(i, i + 3);//System.out.println(s4);if (i == 0 && s4.equals("000")) {} else {switch (s4) {case "000":s3.append("0");break;case "001":s3.append("1");break;case "010":s3.append("2");break;case "011":s3.append("3");break;case "100":s3.append("4");break;case "101":s3.append("5");break;case "110":s3.append("6");break;case "111":s3.append("7");break;}}}return s3;}private static StringBuilder changeToEr(String s1) {StringBuilder s2 = new StringBuilder();int len = s1.length();char[] ch = s1.toCharArray();for (int i = 0; i < len; i++) {char c = ch[i];switch (c) {case '0':s2.append("0000");break;case '1':s2.append("0001");break;case '2':s2.append("0010");break;case '3':s2.append("0011");break;case '4':s2.append("0100");break;case '5':s2.append("0101");break;case '6':s2.append("0110");break;case '7':s2.append("0111");break;case '8':s2.append("1000");break;case '9':s2.append("1001");break;case 'A':s2.append("1010");break;case 'B':s2.append("1011");break;case 'C':s2.append("1100");break;case 'D':s2.append("1101");break;case 'E':s2.append("1110");break;case 'F':s2.append("1111");break;}}return s2;}}






原创粉丝点击