Preguntas de prueba Preguntas de pruebas anteriores Calculadora pequeña
Esta pregunta es principalmente sobre la conversión de la prueba hexadecimal. Traté de escribir la conversión hexadecimal por mí mismo, pero desafortunadamente solo puedo obtener 30 puntos, así que no me preocupo por eso. Aquí usamos directamente las funciones de boxeo y unboxing de la clase Long para procesar el hexadecimal. Es más conveniente hacerlo. Cabe señalar que las letras en la salida de la función de unboxing Long.toString están en minúsculas y deben estar en mayúsculas.
Descripción del problema
Simular calculadora de tipo de programa, introduzca las instrucciones una por una, las instrucciones pueden incluir
1. Número: 'NUM X', X es una cadena que contiene solo letras mayúsculas y números, que representan un número en la base actual
2. Instrucciones de funcionamiento: 'ADD', 'SUB', 'MUL', 'DIV', 'MOD', respectivamente, significa suma, resta y multiplicación, la división toma el cociente y la división toma el resto
3. Instrucción de conversión de base: 'CHANGE K', convierte la base actual en base K (2≤K≤36)
4. Instrucción de salida: 'IGUAL', muestra el resultado en la base actual
5. Comando de reinicio: 'BORRAR', borra el número actual
Las instrucciones se dan de acuerdo con las siguientes reglas:
números, las instrucciones de cálculo no se darán de forma continua, las instrucciones de conversión hexadecimal, las instrucciones de salida, las instrucciones de reinicio pueden dar continuamente
el primer número que aparece después de la instrucción de operación, que representa el número involucrado en la operación. Y no habrá instrucción de operación e instrucción de salida entre la instrucción de operación y el número
. El primer número que aparece después de la instrucción de reinicio representa el valor básico. Y no habrá instrucciones de operación e instrucciones de salida entre la instrucción de reinicio y el primer número. La
instrucción de conversión hexadecimal puede aparecer en cualquier lugar
Las variables intermedias en el proceso de cálculo son todas enteras no negativas e inferiores a 2 ^ 63.
Utilice mayúsculas '' Z 'para representar 10 35
Formato de entrada
Línea 1: 1 n, indica el número de
instrucciones Línea 2 ... n + 1: Cada línea da una instrucción. La secuencia de instrucciones debe comenzar con 'CLARO' y cumplir con las reglas de instrucción
Formato de salida
Dar los resultados de cada 'EQUAL' por turno
Entrada de muestra
7
BORRAR
NUM 1024
CAMBIAR 2
AÑADIR
NUM 100000
CAMBIAR 8
IGUAL
Salida de muestra
2040
Referencia de código
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
// 当前运算符
private static String oper = null;
// 当前的结果
private static long num = 0;
// 当前的进制
private static int radix = 10;
public static void main(String[] args) {
try {
run();
} catch (NumberFormatException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 处理输入输出
* @throws IOException
* @throws NumberFormatException
*/
public static void run() throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 指令条数
int n = Integer.parseInt(br.readLine());
for (int i = 0; i < n; i++) {
String temp = br.readLine();
if (temp.contains(" ")) {
// 两个操作符
String[] ins = temp.split(" ");
switch (ins[0]) {
case "NUM":
if (oper != null) {
dealOper(Long.valueOf(ins[1], radix));
}else {
num = Long.valueOf(ins[1], radix);
}
break;
case "CHANGE":
radix = Integer.parseInt(ins[1]);
break;
default:
break;
}
}else {
// 一个操作符
if(temp.equals("EQUAL")) {
System.out.println(Long.toString(num, radix).toUpperCase());
}else if(temp.equals("CLEAR")) {
num = 0;
}else {
oper = temp;
}
}
}
}
/**
* 处理运算
* @param l
*/
private static void dealOper(long l) {
switch (oper) {
case "ADD":
num += l;
oper = null;
break;
case "SUB":
num -= l;
oper = null;
break;
case "MUL":
num *= l;
oper = null;
break;
case "DIV":
num /= l;
oper = null;
break;
case "MOD":
num %= l;
oper = null;
break;
default:
break;
}
}
}