【问题描述】
问题描述
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
【注意】
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
【提示】
先将十六进制数转换成某进制数,再由某进制数转换成八进制。
【锦囊1】
使用二进制。
【锦囊2】
先把十六进制转成二进制,每位十六进制正好转成4位二进制,然后再将二进制转成八进制,每三个二进制转成一个八进制。
代码:
package 入门训练;
import java.util.Scanner;
public class 十六进制转八进制 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan=new Scanner(System.in);
int n=scan.nextInt();
String[] strs=new String[n];
String[] outputs=new String[n];
for(int i=0;i<n;i++) {
strs[i]=scan.next();
outputs[i]=erToBa(shiLiuToEr(strs[i]));
}
for(int i=0;i<outputs.length;i++) {
System.out.println(outputs[i]);
}
}
public static String shiLiuToEr(String str) {
StringBuffer sb=new StringBuffer();
for(int i=0;i<str.length();i++) {
char c=str.charAt(i);
if(c=='0') {
sb.append("0000");
}
else if(c=='1') {
sb.append("0001");
}
else if(c=='2') {
sb.append("0010");
}
else if(c=='3') {
sb.append("0011");
}
else if(c=='4') {
sb.append("0100");
}
else if(c=='5') {
sb.append("0101");
}
else if(c=='6') {
sb.append("0110");
}
else if(c=='7') {
sb.append("0111");
}
else if(c=='8') {
sb.append("1000");
}
else if(c=='9') {
sb.append("1001");
}
else if(c=='A') {
sb.append("1010");
}
else if(c=='B') {
sb.append("1011");
}
else if(c=='C') {
sb.append("1100");
}
else if(c=='D') {
sb.append("1101");
}
else if(c=='E') {
sb.append("1110");
}
else if(c=='F') {
sb.append("1111");
}
}
String st=sb.toString();
while(true) {
if(st.charAt(0)=='0') {
st=st.substring(1);
}
else {
break;
}
}
return st.toString();
}
public static String erToBa(String str) {
StringBuffer sb=new StringBuffer();
if(str.length()%3==1) {
str="00"+str;
}
else if(str.length()%3==2) {
str="0"+str;
}
for(int i=0;i<str.length();i=i+3) {
String str1=str.substring(i, i+3);
if(str1.equals("000")) {
sb.append("0");
}
else if(str1.equals("001")) {
sb.append("1");
}
else if(str1.equals("010")) {
sb.append("2");
}
else if(str1.equals("011")) {
sb.append("3");
}
else if(str1.equals("100")) {
sb.append("4");
}
else if(str1.equals("101")) {
sb.append("5");
}
else if(str1.equals("110")) {
sb.append("6");
}
else if(str1.equals("111")) {
sb.append("7");
}
}
String st=sb.toString();
while(true) {
if(st.charAt(0)=='0') {
st=st.substring(1);
}
else {
break;
}
}
return sb.toString();
}
}