Questions de test Blue Bridge Cup Questions de test précédentes Petite calculatrice (Solution Java)

Questions de test Questions de test précédentes Petite calculatrice

Cette question concerne principalement la conversion de l'hexadécimal de test. J'ai essayé d'écrire la conversion hexadécimale par moi-même, mais malheureusement, cela ne peut obtenir que 30 points, donc je ne m'inquiète pas. Ici, nous utilisons directement les fonctions de boxe et de déballage de la classe Long pour traiter l'hexadécimal. C'est plus pratique à faire. Il convient de noter que les lettres dans la sortie de la fonction de déballage Long.toString sont en minuscules et doivent être en majuscules.

Description du problème

Simuler la calculatrice de type de programme, saisir les instructions une par une, les instructions peuvent inclure

  1. Nombre: 'NUM X', X est une chaîne contenant uniquement des lettres majuscules et des chiffres, représentant un nombre dans la base courante
  2. Instructions d'opération: 'ADD', 'SUB', 'MUL', 'DIV', 'MOD', signifie respectivement addition, soustraction et multiplication, la division prend le quotient et la division prend le reste
  3. Instruction de conversion de base: 'CHANGE K', convertit la base courante en base K (2≤K≤36)
  4. Instruction de sortie: 'EQUAL', affiche le résultat dans la base actuelle
  5. Commande de réinitialisation: 'CLEAR', efface le numéro actuel

Les instructions sont données conformément aux règles suivantes: les
  nombres, les instructions de calcul ne seront pas données en continu, les instructions de conversion hexadécimale, les instructions de sortie, les instructions de réinitialisation peuvent donner en continu
  le premier numéro qui apparaît après l'instruction d'opération, qui représente le nombre impliqué dans l'opération. Et il n'y aura pas d'instruction d'opération et d'instruction de sortie entre l'instruction d'opération et le nombre
  . Le premier nombre qui apparaît après l'instruction de réinitialisation représente la valeur de base. Et il n'y aura pas d'instructions d'opération ni d'instructions de sortie entre l'instruction de réinitialisation et le premier nombre. L'
  instruction de conversion hexadécimale peut apparaître n'importe où

Dans le processus de calcul, les variables intermédiaires sont toutes des entiers non négatifs et inférieurs à 2 ^ 63.
  Utilisez la majuscule « A » « Z » pour représenter 10 35

Format d'entrée

Ligne 1: 1 n, indiquant le nombre d'
instructions Ligne 2 ... n + 1: Chaque ligne donne une instruction. La séquence d'instructions doit commencer par «CLEAR» et respecter les règles d'instructions

Format de sortie

Donnez les résultats de chaque 'EQUAL' tour à tour

Exemple d'entrée

7
EFFACER
NUM 1024
CHANGER 2
AJOUTER
NUM 100000
CHANGER 8
ÉGAL

Exemple de sortie

2040

Référence du code

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

Je suppose que tu aimes

Origine blog.csdn.net/L333333333/article/details/104882369
conseillé
Classement