Problem:
Hint:
//这里我被坑了好久,发现自己把八进制前导的0以及后面的0全部不显示了,后面改过来就好了
- 先将十六进制转化为二进制//由于数据实在是太大,所以不转化为十进制了,因为long这个数据类型根本存不下十六进制转化为十进制的数,而如果使用大数类的话存转化后的十进制数再将它转化为八进制会超时
- 再将二进制转化为八进制(每三位转化为一个八进制数,若转化为二进制后不够被三整除,需要往前面补上前导的0)
- 二进制转化为八进制的时候需要注意的是前导的0不显示,后面的0正常显示(就是被这里坑了QWQ)
AcCode:
import java.util.Scanner;
public class Main{
/**
* 16进制转化为2进制
* @param hexString
* @return
*/
public static String hextoBin(String hexString) {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < hexString.length(); i++) {
switch (hexString.charAt(i)) {
case '0':
builder.append("0000");
break;
case '1':
builder.append("0001");
break;
case '2':
builder.append("0010");
break;
case '3':
builder.append("0011");
break;
case '4':
builder.append("0100");
break;
case '5':
builder.append("0101");
break;
case '6':
builder.append("0110");
break;
case '7':
builder.append("0111");
break;
case '8':
builder.append("1000");
break;
case '9':
builder.append("1001");
break;
case 'A':
builder.append("1010");
break;
case 'B':
builder.append("1011");
break;
case 'C':
builder.append("1100");
break;
case 'D':
builder.append("1101");
break;
case 'E':
builder.append("1110");
break;
case 'F':
builder.append("1111");
break;
default:
break;
}
}
if(builder.length()%3==1) {
return "00"+builder.toString();
}else if(builder.length()%3==2) {
return "0"+builder.toString();
}
return builder.toString();
}
/**
* 二进制转换为8进制
* @param binString
* @return
*/
public static String bintoOct(String binString) {
StringBuilder builder = new StringBuilder();
int result = (binString.charAt(0) - '0') * 4 + (binString.charAt(1) - '0') * 2 + (binString.charAt(2) - '0');
if(result!=0) {
builder.append(result);
}
for (int i = 3; i < binString.length(); i+=3) {
result = (binString.charAt(i) - '0') * 4 + (binString.charAt(i + 1) - '0') * 2 + (binString.charAt(i + 2) - '0');
builder.append(result);
}
return builder.toString();
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
while (n != 0) {
String hexString = in.next();
String binString = hextoBin(hexString);
System.out.println(bintoOct(binString));
n--;
}
}
}