public class Test{ public static void main(String[] args) { Scanner scanner=new Scanner(System.in); int n=scanner.nextInt(); if (n>=1||n<=10) { String strings[]=new String[n]; for (int i = 0; i < n; i++) { strings[i]=scanner.next(); } //使用for each类型的循环 for (String str : strings) { //调用transform16To8()静态方法 transform16To8(str); } }else { scanner.close(); return; } } PRivate static void transform16To8(String str) { //初始化StringBuffer类的sb对象,但是这样的 对象是一个空 StringBuffer sb=new StringBuffer(); //for循环 for (int i = 0; i < str.length(); i++) { // 把16进制数的每一位转换成四位2进制数字 String string=transform16To2(str.charAt(i)); sb.append(string); } //将转换成2进制的数字放入java栈中 Stack<String> stack=new Stack<>(); //最后 i -= 3;这句的意思就是i = i - 3 for (int i = sb.length(); i >=0; i-=3) { int start= i-3 >=0 ? i-3 : 0; //截取字符串 String temp=sb.substring(start,i); // 从后向前每三位2进制数字转换成一位8进制数字,存储在栈中。 stack.add(transform12To8(temp)); } //判断栈顶是否有0 while (stack.peek().equals("0")) { // 删除前面的多余的0 stack.pop(); } while (!stack.isEmpty()) { System.out.print(stack.pop()); } System.out.println(); } private static String transform12To8(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 + ""; } private static String transform16To2(char c) { int temp=c>='A'?c - 'A' + 10 : c - '0'; int[] a=new int[4]; int i = 0; for (; i < a.length; i++) { //取temp的余数 a[i]=temp%2; temp /= 2; } i--; StringBuffer sb =new StringBuffer(); //逆序排列 for (; i>=0; i--) { sb.append(a[i]); } return sb.toString(); } }
新闻热点
疑难解答