蓝桥杯.基础练习:十六进制转换为八进制

分析:这里直接调用java的进制转换方法来对此问题进行求解,但是数据太庞大了 无法得出相应的结果,如果使用大数据的话也无法在获取数据的时候进行相应的转换所以只能使用如下方法。
import java.util.Scanner;
public class Lanqiao0 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String tempBin[] = {"0000","0001","0010","0011","0100","0101","0110","0111","1000","1001","1010","1011","1100","1101","1110","1111"};
// 用一维数组来让16进制到2进制的一个转换;
int N = sc.nextInt();
String []val = new String[N];
for(int i = 0; i < N; i++){
val[i] = sc.next();
}
String tempVal;
for(String a:val){
tempVal = HexToOc(a,tempBin);
if(tempVal.substring(0,1).equals("0")){
System.out.println(tempVal.substring(1));
}else{
System.out.println(tempVal);
}
}
}
private static String HexToOc(String str,String[] bin) {
// TODO Auto-generated method stub
//先转成二进制
char ch[] = str.toCharArray();
// 可变字符串
StringBuffer bins = new StringBuffer();
for(int i = 0; i < ch.length; i++){
if(ch[i]-'0' < 10){
// bin[ch[i]为当前字符-'0']为存储要转换的二进制的一维数组
bins.append(bin[ch[i]-'0']);
}else{
// 减7是因为A为65 , 9为57 否则替换时会超出数组范围
bins.append(bin[ch[i]-'7']);
}
}
//再由二进制转成 八进制
String temp;
StringBuffer octs = new StringBuffer();
int one,two,three;
for(int i = bins.length();i >= 0; i-=3){
if(i-3 >= 0){
// 三位数进行截取;然后转换为8进制 110转换为8进制 就是1乘2的平方加1乘2的一次方加0成2的0次方
temp = bins.substring(i-3,i);
one = Integer.valueOf(temp.substring(0,1));
two = Integer.valueOf(temp.substring(1,2));
three = Integer.valueOf(temp.substring(2,3));
octs.append(one*2*2 + two*2 + three);
}else{
temp = bins.substring(0, i);
if(temp.length() == 1){
octs.append(Integer.valueOf(temp));
}else if(temp.length() == 2){
one = Integer.valueOf(temp.substring(0,1));
two = Integer.valueOf(temp.substring(1,2));
octs.append(one*2 + two);
}
}
}
return octs.reverse().toString();
}
}

浙公网安备 33010602011771号