题目链接:http://lx.lanqiao.cn/problem.page?gpid=T51
问题描述
给定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 Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String s = sc.nextLine();
String[] str = new String[10];
for(int i=0;i<n;i++) {
str[i] = sc.nextLine();
}
for(int i=0;i<n;i++) {
StringBuilder sb = new StringBuilder();
for(int j=0;j<str[i].length();j++) {
if(str[i].charAt(j)=='0')
sb.append("0000");
if(str[i].charAt(j)=='1')
sb.append("0001");
if(str[i].charAt(j)=='2')
sb.append("0010");
if(str[i].charAt(j)=='3')
sb.append("0011");
if(str[i].charAt(j)=='4')
sb.append("0100");
if(str[i].charAt(j)=='5')
sb.append("0101");
if(str[i].charAt(j)=='6')
sb.append("0110");
if(str[i].charAt(j)=='7')
sb.append("0111");
if(str[i].charAt(j)=='8')
sb.append("1000");
if(str[i].charAt(j)=='9')
sb.append("1001");
if(str[i].charAt(j)=='A')
sb.append("1010");
if(str[i].charAt(j)=='B')
sb.append("1011");
if(str[i].charAt(j)=='C')
sb.append("1100");
if(str[i].charAt(j)=='D')
sb.append("1101");
if(str[i].charAt(j)=='E')
sb.append("1110");
if(str[i].charAt(j)=='F')
sb.append("1111");
}
StringBuilder sb1 = new StringBuilder();
String str_80 = sb.toString();
String str_81 = "";
if(str_80.length()%3 == 1) {
str_81 = str_81 + "00" + str_80;
}
else if(str_80.length()%3 == 2) {
str_81 = str_81 + "0" + str_80;
}
else {
str_81 = str_80;
}
//System.out.println(str_81);
for(int k= str_81.length()-1;k>=0;k-=3) {
if(str_81.substring(k-2, k+1).equals("000"))
sb1.append(0);
if(str_81.substring(k-2, k+1).equals("001"))
sb1.append(1);
if(str_81.substring(k-2, k+1).equals("010"))
sb1.append(2);
if(str_81.substring(k-2, k+1).equals("011"))
sb1.append(3);
if(str_81.substring(k-2, k+1).equals("100"))
sb1.append(4);
if(str_81.substring(k-2, k+1).equals("101"))
sb1.append(5);
if(str_81.substring(k-2, k+1).equals("110"))
sb1.append(6);
if(str_81.substring(k-2, k+1).equals("111"))
sb1.append(7);
}
String res = new StringBuffer(sb1.toString()).reverse().toString();
while(res.indexOf("0")==0) {//去零操作
res = res.substring(1);
}
System.out.println(res);
}
}
}