【問題描述】
問題描述
? 給定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();
}
}