@java puente azul de la taza del Grupo B Ejercicio Fundamentos (30) pregunta 12: octal a su vez Hex
Descripción del problema
Dado un número entero positivo n hexadecimal, octal de salida de los mismos corresponde.
Formato de entrada
de entrada actúa un primer entero positivo n (1 <= n <= 10).
Siguiente n líneas, cada línea a de a 0 9, la A mayúscula cadena que consiste en F, convertido a hexadecimal representa un número entero positivo, cada hexadecimal longitud del número no exceda de 100.000.
Salida de formato
de salida n líneas, cada entrada acto correspondiente número entero positivo octal.
[Nota]
introduzca el número hexadecimal no tiene 0 inicial, como 012A.
número octal tampoco puede tener un cero inicial.
Ejemplo de entrada
2
39
123ABC
Salida de muestra
71 es
4,435,274
[Nota]
convertir primero un número hexadecimal en un número decimal, y luego convertido por un número binario en octal.
código:
(Esta pregunta es yo no era capaz de hacer que la respuesta correcta, pero he encontrado un hermano mayor para escribir en línea, después de la presentación de los resultados de la evaluación está aquí para que todos puedan compartir, también se puede ver el gran hermano originales oh ~ !)
java.util.Scanner importación;
java.util.Stack importación;
public class HexadecimalConversionToOctal {
Cadena convert16To2 estática (char c) {
int temp = c> = 'A'? c - 'A' + 10: c - '0';
int [] a = new int [4];
int i = 0;
para (; i <a.length; i ++) {
a [i] = temp% 2;
temp / = 2;
}
I-;
StringBuffer sb = new StringBuffer ();
para (; i> = 0; i-) {
sb.append (a [i]);
}
Devolver sb.ToString ();
}
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<>();
for (int i = sb.length(); i >= 0; 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();// 删除前面的多余的0
}
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);
}
}
}
}