package org.bluebridge.lx;
/*
* 十六进制转八进制
问题描述
给定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 BASIC_12 {
static String bin[] = { "0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100",
"1101", "1110", "1111" };
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = Integer.parseInt(sc.nextLine());
String[] data = new String[n];
for (int i = 0; i < data.length; i++)
data[i] = sc.nextLine();
sc.close();
for (int i = 0; i < n; i++) {
tobin(data[i].toCharArray());
}
}
// 转成二进制
private static void tobin(char[] data) {
StringBuilder two = new StringBuilder();
for (int j = 0; j < data.length; j++) {
int index = (int) data[j];
index = index <= 57 ? index - 48 : index - 55;
two.append(bin[index]);
}
// 去掉二进制前面的0
for (int j = 0; j < two.length(); j++)
if (two.charAt(j) != '0') {
two = two.delete(0, j);
break;
}
tooct(two);
}
//转成八进制
private static void tooct(StringBuilder two) {
int c0 = two.length() % 3;
if (c0 == 1)
two.insert(0, "00");
else if (c0 == 2)
two.insert(0, "0");
int n = two.length() / 3;
String temp = "";
StringBuilder octstr = new StringBuilder();
for (int j = 0; j < n; j++) {
temp = two.substring(j * 3, j * 3 + 3);
switch (temp) {
case "000":
octstr.append("0");
break;
case "001":
octstr.append("1");
break;
case "010":
octstr.append("2");
break;
case "011":
octstr.append("3");
break;
case "100":
octstr.append("4");
break;
case "101":
octstr.append("5");
break;
case "110":
octstr.append("6");
break;
case "111":
octstr.append("7");
break;
}
}
System.out.println(octstr);
}
}
十六进制转八进制
最新推荐文章于 2022-10-10 12:29:35 发布