Preguntas de prueba de Blue Bridge Cup Preguntas de pruebas anteriores Calculadora pequeña (solución Java)

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

Supongo que te gusta

Origin blog.csdn.net/L333333333/article/details/104882369
Recomendado
Clasificación