今天刷蓝桥杯的题目时碰到了十六进制转八进制的题目,耗了我两个小时才做出来,虽然没有别人写的精炼并且行数少,但是这是我自己实打实的,自己的思路,我们先来看一下题目
一开始看提示以为是十六进制转换成二进制,再转换成八进制(想了半个小时也没思路),后来我想起来老师讲过这种2的阶乘转换成2进制再转换成别的进制将简单多了,后来我也是这么做的,
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String a = scan.nextLine();
List list = new ArrayList<String>();
for(int i = 0; i < Integer.parseInt(a); i++){
StringBuffer sb ;
String b = scan.nextLine();
//把字符串转换成一串0 1的数
char[] c = b.toCharArray();
String [] g = new String[c.length];
for(int j = 0; j < c.length;j++){
if(c[j]=='A'){
g[j] = "1010";
}else if(c[j]=='B'){
g[j] = "1011";
}else if(c[j]=='C'){
g[j] = "1100";
} else if(c[j]=='D'){
g[j] = "1101";
} else if(c[j]=='E'){
g[j] = "1110";
}else if(c[j]=='F'){
g[j] = "1111";
}else if(c[j]=='0'){
g[j] = "0000";
} else if(c[j]=='1'){
g[j] = "0001";
} else if(c[j]=='2'){
g[j] = "0010";
} else if(c[j]=='3'){
g[j] = "0011";
} else if(c[j]=='4'){
g[j] = "0100";
} else if(c[j]=='5'){
g[j] = "0101";
} else if(c[j]=='6'){
g[j] = "0110";
} else if(c[j]=='7'){
g[j] = "0111";
} else if(c[j]=='8'){
g[j] = "1000";
}
else if(c[j]=='9'){
g[j] = "1001";
}
}
sb = new StringBuffer();
for(int j = 0; j < c.length;j++){
sb.append(g[j]);
}
//判断是否成3的倍数,不够就添加0
int y = sb.length()/3;
int u = sb.length()%3;
if(u==1){
sb.insert(0, "00");
y++;
}else if(u==2){
sb.insert(0, "0");
y++;
}
StringBuffer sb1 = new StringBuffer();
for(int j =0; j < y;j++){
String q =sb.substring(j*3,j*3+3);
if(q.equals("000")){
sb1.append("0");
}else if(q.equals("001")){
sb1.append("1");
}else if(q.equals("010")){
sb1.append("2");
}else if(q.equals("011")){
sb1.append("3");
}else if(q.equals("100")){
sb1.append("4");
}else if(q.equals("101")){
sb1.append("5");
}else if(q.equals("110")){
sb1.append("6");
}else if(q.equals("111")){
sb1.append("7");
}
}
//从头开始删除第一个数为零的情况,直到第一个不是零跳出,
for(int j = 0; j < 3; j++){
if(sb1.substring(j,j+1).equals("0")){
sb1.delete(j, j+1);
}else{
break;
}
}
list.add(sb1);
}
for(int i = 0; i < Integer.parseInt(a); i++){
System.out.println(list.get(i));
}
}
}
因为这几天我正在学习《java编程思想第四版》上面有转进制的,一开始我没想,那个转进制的给忘了,后来我看了,也用了,但是由的结果会报错,我就在网上查了,原来是长度不大于100000,long类型肯定没有那么多啊,肯定是出题人出这个题就想到了不让你用转进制的方法,让你自己编写。