Límite de recursos Límite de
tiempo: 1,0 s
Límite de memoria: 512,0 MB
Descripción del problema
dado entero positivo n hexadecimal, corresponde la salida octal del mismo.
La entrada del formato de
entrada actúa como un primer entero positivo n (1 <= n <= 10). En las siguientes n líneas, cada línea contiene una cadena que consta de 0 9 y letras mayúsculas A F, que representa el entero positivo hexadecimal a convertir, y la longitud de cada número hexadecimal no excede 100000.
Formato de
salida salida n líneas, cada entrada de acto correspondiente entero positivo octal.
[Nota] El número hexadecimal introducido no tendrá un 0 a la izquierda, como 012A.
El número octal de salida tampoco puede tener un 0 a la izquierda.
Entrada de muestra
2 39 123ABCSalida de muestra
71 4435274
[Mensaje]
Primero convierta el número hexadecimal en un número hexadecimal determinado, y luego convierta el número hexadecimal en un número octal.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for(int cnt=0;cnt<n;cnt++){
String str = sc.next();
StringBuilder str2 = To_binary(str);
To_Octal(str2);
}
}
public static StringBuilder To_binary(String str){
//16进制转换为2进制
StringBuilder str2 = new StringBuilder(); //StringBuilder用来申明可变字符串
for(int i=0;i<str.length();i++){
char c = str.charAt(i);
switch(c){
case '0':
str2.append("0000");break;
case '1':
str2.append("0001");break;
case '2':
str2.append("0010");break;
case '3':
str2.append("0011");break;
case '4':
str2.append("0100");break;
case '5':
str2.append("0101");break;
case '6':
str2.append("0110");break;
case '7':
str2.append("0111");break;
case '8':
str2.append("1000");break;
case '9':
str2.append("1001");break;
case 'A':
str2.append("1010");break;
case 'B':
str2.append("1011");break;
case 'C':
str2.append("1100");break;
case 'D':
str2.append("1101");break;
case 'E':
str2.append("1110");break;
case 'F':
str2.append("1111");break;
default:break;
}
}
return str2;
}
public static void To_Octal(StringBuilder str){
//转为8进制,转1位输出1位
int len = str.length();
int ans=0,s = 0;
if(len % 3==1){
//最高位的补零模拟
ans = str.charAt(0)-'0';
s+=1;
}else if(len % 3==2){
ans = (str.charAt(0)-'0')*2 + (str.charAt(1)-'0');
s+=2;
}
if(ans>0)
System.out.print(ans);
boolean flog = true;
for(int i=s;i<str.length();i+=3){
ans =(str.charAt(i)-'0')*4+ (str.charAt(i+1)-'0')*2 + (str.charAt(i+2)-'0');
if(flog){
if(ans==0){
continue;
}else{
flog = false;
}
}
System.out.print(ans);
}
System.out.println();
}
}