试题 基础练习 十六进制转八进制
import java.util.Scanner;
public class Main {
// TODO Auto-generated method stub
//第一步:十六进制转换二进制。
//第二部:二进制转换八进制。
Scanner scn = new Scanner(System.in);//输入个数
int num = scn.nextInt();
for(int i=0;i<num;i++) {//输入需要转换的十六进制并进行转换
String xx;
String six = scn.next(); //获取16进制
String newx = changetwo(six);//转化成二进制
System.out.println(changeight(newx));//转化成八进制并输出;
}
}
public static String changetwo(String a) {//转换成二进制
StringBuffer aa = new StringBuffer();
for(int i=0;i<a.length();i++) {
switch(a.charAt(i)) {
case '0' : {aa.append("0000"); break;}
case '1' : {aa.append("0001"); break;}
case '2' : {aa.append("0010"); break;}
case '3' : {aa.append("0011"); break;}
case '4' : {aa.append("0100"); break;}
case '5' : {aa.append("0101"); break;}
case '6' : {aa.append("0110"); break;}
case '7' : {aa.append("0111"); break;}
case '8' : {aa.append("1000"); break;}
case '9' : {aa.append("1001"); break;}
case 'A' : {aa.append("1010"); break;}
case 'B' : {aa.append("1011"); break;}
case 'C' : {aa.append("1100"); break;}
case 'D' : {aa.append("1101"); break;}
case 'E' : {aa.append("1110"); break;}
case 'F' : {aa.append("1111"); break;}
default:break;
}
}
return aa.toString();//返回转换完成的二进制。
}
public static String changeight(String a) {//转换成八进制
StringBuffer x = new StringBuffer();
String xx = "";//用于保存每次获取的三个字符
//判断能否整除三,如果不能在前面补齐0
if(a.length()%3==1) {
a = "00" + a;
}
if(a.length()%3==2) {
a = "0" + a;
}
int num= 0 ;//判断是否满足三个
int flage = 0;//判断先出来的是0;
for(int i=0;i<a.length();i++) {
xx += a.charAt(i);//获取字符
if(num == 2) {
if(flage==0&&xx.equals("000")) {//如果开始为八进制的0的话就不添加到八进制当中去。
}
else {
flage=1;
switch(xx) {
case "000" : {x.append("0"); break;}
case "001" : {x.append("1"); break;}
case "010" : {x.append("2"); break;}
case "011" : {x.append("3"); break;}
case "100" : {x.append("4"); break;}
case "101" : {x.append("5"); break;}
case "110" : {x.append("6"); break;}
case "111" : {x.append("7"); break;}
default:break;
}
}
xx = "";
num = 0;
}
else
num++;
}
return x.toString();
}
}
作为一个新手这道题坑了我好久。每次提交代码总是出现运行超时。我就去查看了别人的代码才发现字符串拼接的时候用+好和使用StringBuffer的append()方法进行拼接的时候所使用的时间不同,使用+号进行拼接比使用append()方法拼接所使用的时间多。
参考文章:https://blog.csdn.net/m0_37589327/article/details/78605268