基础练习 十六进制转八进制
问题描述
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
【注意】
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
【提示】
先将十六进制数转换成某进制数,再由某进制数转换成八进制。
//十六进制转八进制
import java.util.Scanner;
public class Test4 {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int n=in.nextInt();
String[] str=new String[n];
for (int i = 0; i < str.length; i++) {
str[i]=in.next();
}
for(int i=0;i<str.length;i++){
function(str[i]);//十六进制转换为八进制
}
}
private static void function(String str) {//十六进制转换为十进制
int len=str.length();
int s=0,sum=0;
for (int i = 0; i < len; i++) {
char c = str.charAt(i);
switch (c) {
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
s=Character.getNumericValue(c);
break;
case 'A':
s=10;
break;
case 'B':
s=11;
break;
case 'C':
s=12;
break;
case 'D':
s=13;
break;
case 'E':
s=14;
break;
case 'F':
s=15;
break;
default:
break;
}
sum=sum+(int) Math.pow(16, len-1-i)*s;
}
function2(sum);
}
private static void function2(int sum) {//十进制转换为八进制
char[] arr=new char[20];
int i=0;
char[] date={'0','1','2','3','4','5','6','7'};
if (sum==0) {
System.out.println(sum);
}
while(sum>0){
arr[i]=date[sum%8];
sum=sum/8;
i++;
}
String string=new String(arr).trim();
String str=new StringBuffer(string).reverse().toString();//reverse字符串反转函数
System.out.println(str);
}
}