@java puente azul de la taza del Grupo B Ejercicio Fundamentos (30) pregunta 12: octal a su vez Hex

@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);
		}
	}
}

}

Transferencia de contenido: https: //blog.csdn.net/viclao/article/details/41328919

Publicado 29 artículos originales · ganado elogios 1 · vistas 1094

Supongo que te gusta

Origin blog.csdn.net/DAurora/article/details/104161443
Recomendado
Clasificación