问题描述
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
注意
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
提示
先将十六进制数转换成某进制数,再由某进制数转换成八进制。
此题用Java做可以直接调用方法。
public static void main(String[] args){ Scanner sc=new Scanner(System.in); BigInteger num=null; int a=sc.nextInt(); String[] a1 = new String[a]; for(int b=0;b<a;b++){ num=new BigInteger(sc.next(),16); a1[b]=num.toString(8); } for(int b=0;b<a;b++){ System.out.println(a1[b]); } }若用普通方法,则为下面代码: public static void main(String[] args){ Scanner sc=new Scanner(System.in); int n=sc.nextInt(); String[] st=new String[n]; for(int i=0;i<n;i++) { st[i] =sc.next(); } sc.close(); for(int i=0;i<n;i++) { String str1=ttos(st[i]); int len_str1=str1.length(); if(len_str1%3==1){ str1="00"+str1; } else if(len_str1%3==2){ str1="0"+str1; } ttoe(str1); System.out.println(); } } public static String ttos(String str) { int len_str=str.length(); StringBuilder str2=new StringBuilder(); for(int i=0;i<len_str;++i){ switch(str.charAt(i)){ case '0':str2.append("0000"); break; case '1':str2.append("0001"); break; case '2':str2.append("0010"); break; case '3':str2.append("0011"); break; case '4':str2.append("0100"); break; case '5':str2.append("0101"); break; case '6':str2.append("0110"); break; case '7':str2.append("0111"); break; case '8':str2.append("1000"); break; case '9':str2.append("1001"); break; case 'A':str2.append("1010"); break; case 'B':str2.append("1011"); break; case 'C':str2.append("1100"); break; case 'D':str2.append("1101"); break; case 'E':str2.append("1110"); break; case 'F':str2.append("1111"); break; default: break; } } return str2.toString(); } public static void ttoe(String str2){ int len=str2.length(); int a; a=(str2.charAt(0)-'0')*4+(str2.charAt(1)-'0')*2+(str2.charAt(2)-'0'); if(a!=0)System.out.print(a); for(int i=3;i<=len-2;i+=3){ a=(str2.charAt(i)-'0')*4+(str2.charAt(i+1)-'0')*2+(str2.charAt(i+2)-'0'); System.out.print(a); } }