您的位置:首页 > 其它

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

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: