1.问题描述
问题描述
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0-9、大写字母A-F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
注意
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
提示
先将十六进制数转换成某进制数,再由某进制数转换成八进制。
2.代码实现
import java.util.Scanner;
public class Main {
//16进制转2进制
public static String hex2Bin(String hex){
StringBuilder sb = new StringBuilder();
char[] hex_chars = hex.toCharArray();
for(char item:hex_chars){
switch (item){
case '0':sb.append("0000");break;
case '1':sb.append("0001");break;
case '2':sb.append("0010");break;
case '3':sb.append("0011");break;
case '4':sb.append("0100");break;
case '5':sb.append("0101");break;
case '6':sb.append("0110");break;
case '7':sb.append("0111");break;
case '8':sb.append("1000");break;
case '9':sb.append("1001");break;
case 'A':sb.append("1010");break;
case 'B':sb.append("1011");break;
case 'C':sb.append("1100");break;
case 'D':sb.append("1101");break;
case 'E':sb.append("1110");break;
case 'F':sb.append("1111");break;
default:sb.append("ERROR");break;
}
}
return sb.toString();
}
//2进制转8进制
public static String bin2Otc(String bin){
StringBuilder sb = new StringBuilder();
//将字符串的长度补齐到3的整数倍
int binLength = bin.length();
if(binLength%3==1){
bin = "00"+bin;
}else if(binLength%3==2){
bin = "0"+bin;
}
//每3位转换出一个8进制数
for(int i=0;i<bin.length()/3;i++){
String octItem = bin.substring(i*3,i*3+3);
switch (octItem){
case "000":sb.append("0");break;
case "001":sb.append("1");break;
case "010":sb.append("2");break;
case "011":sb.append("3");break;
case "100":sb.append("4");break;
case "101":sb.append("5");break;
case "110":sb.append("6");break;
case "111":sb.append("7");break;
default:sb.append("ERROR");break;
}
}
return sb.toString();
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int num_count = scanner.nextInt();
String []nums = new String[num_count];
for(int i=0;i<num_count;i++){
nums[i] = scanner.next();
}
for(int i=0;i<num_count;i++){
String bin = hex2Bin(nums[i]);
String oct = bin2Otc(bin);
if(oct.charAt(0)=='0'){
oct = oct.substring(1);
}
System.out.println(oct);
}
}
}
评论 (0)