import java.util.Scanner;
import java.util.Stack;
public class Main {
static String convert16To2(char c){
int temp=c>='A'?c-'A'+10:c-'0';
int [] a=new int[4]; //16进制第一位化为4位数的2进制数
int i=0;
for ( ; i < a.length; i++) {
a[i]=temp%2;
temp=temp/2; //倒的二进制数列
}
i--;
StringBuffer sbBuffer=new StringBuffer();
for (; i >=0; i--) {
sbBuffer.append(a[i]); //将倒的2进制数调头
}
return sbBuffer.toString(); //返回4位数的2进制数 string型
}
static String convert2To8(String str){
int result=0;
for (int i = 0; i < str.length(); i++) {
result+=Math.pow(2, str.length() - 1 - i) * (str.charAt(i) - '0');
}
return result+"";
}
static void convert16To8(String n){
StringBuffer sb=new StringBuffer();
for (int i = 0; i < n.length(); i++) {
sb.append(convert16To2(n.charAt(i)));// 把16进制数的每一位转换成四位2进制数字
}
Stack<String> stack=new Stack<String>();
for (int i =sb.length();i>=0;i=i-3) {
int start = i - 3 >= 0 ? i - 3 : 0;
String temp = sb.substring(start, i);
stack.add(convert2To8(temp));// 从后向前每三位2进制数字转换成一位8进制数字,存储在栈中。
}
while (stack.peek().equals("0")) {
stack.pop();
}
while (!stack.isEmpty()) {
System.out.print(stack.pop());
}
System.out.println();
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String[] strings = new String[n];
for (int i = 0; i < n; i++) {
strings[i] = sc.next();
}
for (String string : strings) {
if (string.equals("0")) {
System.out.println(0);
} else {
convert16To8(string);
}
}
}
}
蓝桥杯JAVA 十六进制转八进制
最新推荐文章于 2022-08-09 12:37:49 发布