基础练习 十六进制转八进制
2017-11-20 13:59
225 查看
-
------------------------------------------------------------------------------------------------------------------
(基础练习第二题就难住了 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; } }
相关文章推荐
- 基础练习 十六进制转八进制
- 基础练习 十六进制转八进制 (java)
- 基础练习 十六进制转八进制
- 蓝桥杯:基础练习 十六进制转八进制
- 蓝桥杯 12 基础练习 十六进制转八进制
- 【蓝桥杯】 基础练习 十六进制转八进制
- 基础练习 十六进制转八进制
- 基础练习 十六进制转八进制
- 蓝桥杯-基础练习-十六进制转八进制(被超时了!!!)
- 蓝桥杯:基础练习 十六进制转八进制
- 基础练习 十六进制转八进制
- 蓝桥杯 基础练习 十六进制转八进制
- 基础练习 十六进制转八进制
- 基础练习 十六进制转八进制
- 蓝桥杯基础练习十六进制转八进制
- 基础练习 十六进制转八进制
- 蓝桥水题_ 基础练习 十六进制转八进制
- 蓝桥杯练习-基础练习-十六进制转八进制
- 蓝桥杯-基础练习-十六进制转八进制
- 蓝桥杯 基础练习 十六进制转八进制