ブルーブリッジカップテストの質問過去のテストの質問小さな計算機(Javaソリューション)

この質問は主にテスト16進数の変換に関するものです。自分で16進数変換を書こうとしましたが、残念ながら30ポイントしか取得できないため、心配する必要はありません。ここでは、Longクラスのボックス化関数とボックス化解除関数を直接使用して16進数を処理します。行う方が便利です。Long.toString unboxing関数の出力の文字は小文字であり、大文字である必要があることに注意してください。

問題の説明

プログラムタイプの計算機をシミュレートし、命令を1つずつ入力します。命令には、次のものが含まれる場合があります。

  1.番号:「NUMX」、Xは大文字と数字のみを含む文字列で、現在のベースの番号を表します
  。2。操作手順:「ADD」、「SUB」、「MUL」、「DIV」、 「MOD」はそれぞれ、加算、減算、乗算を意味し、除算は商を取り、除算は残りを取ります
  。3。ベース変換命令:「CHANGEK」、現在のベースをKベースに変換します(2≤K≤36)
  4。出力命令: 「EQUAL」、結果を現在のベース
  5に出力します。リセットコマンド:「CLEAR」、現在の番号をクリアします

命令は次の規則に従って与えられます:
  番号、計算命令は連続して与えられない、16進変換命令、出力命令、リセット命令は
  、操作に関係する番号を表す操作命令の後の最初の番号を連続して与えることができます。また、操作命令と番号の間に操作命令と出力命令はありません
  。リセット命令の後に最初に表示される番号は、基本値を表しています。また、リセット命令と最初の番号の間に操作命令と出力命令はありません
  。16進変換命令はどこにでも現れる可能性があります。

計算の過程で、中間変数はすべて非負の整数であり、2 ^ 63未満です。
  使用capital'A''Z 10 '表現するために35を

入力フォーマット

1行目:1 n、
命令の数を示します2行目... n + 1:各行に1つの命令があります。命令シーケンスは「CLEAR」で始まり、命令ルールを満たしている必要があります

出力フォーマット

各「EQUAL」の結果を順番に示します

サンプル入力

7
CLEAR
NUM 1024
CHANGE 2
ADD
NUM 100000
CHANGE
8EQUAL

サンプル出力

2040年

コードリファレンス

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

おすすめ

転載: blog.csdn.net/L333333333/article/details/104882369