蓝桥杯历届试题——小计算器

package historycontest;
//思路:先对控制台的数据读入,对读入的操作进行判断,通过operator()进行计算,用StringBuilder存储最终结果。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class _55_MiniComputer2 {
	public static void main(String[] args) throws IOException {
//		存储结果
		StringBuilder strBul = new StringBuilder();

//		从键盘接收一行输入的代码
		BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
//		n是命令的个数
		int n = Integer.parseInt(input.readLine());

//		op代表运算操作
		String op = "";
//		k代表进制
		int k = 10;
//		num1存储计算结果,将每次的结果赋给num1
		long num1 = -1;

		for (int i = 0; i < n; i++) {
			String str = input.readLine();
			if (str.equals("CLEAR")) {
				num1 = -1;
				op = "";
			} else if (str.equals("EQUAL")) {
//				append("\n")不写不行,因为可能有多个输出,每次输出要换行!!
				strBul.append(Long.toString(num1, k).toUpperCase()).append("\n");
			} else if (str.startsWith("NUM")) {
				str = str.replace("NUM", "").trim();
//				将NUM后的数转换成k进制
				long num2 = Long.parseLong(str, k);
//				进行运算操作
				num1 = operator(num1, num2, op);
			} else if (str.startsWith("CHANGE")) {
				str = str.replace("CHANGE", "").trim();
				k = Integer.parseInt(str);
			} else {
				op = str;
			}
		}
		System.out.println(strBul.toString());
	}

//	加、减、乘、除、取余操作
	private static long operator(long num1, long num2, String op) {
		if (op.equals("ADD")) {
			return num1 + num2;
		} else if (op.equals("SUB")) {
			return num1 - num2;
		} else if (op.equals("MUL")) {
			return num1 * num2;
		} else if (op.equals("DIV")) {
			return num1 / num2;
		} else if (op.equals("MOD")) {
			return num1 % num2;
		}
//		第一次输入时,返回NUM后的数
		return num2;
	}
}

总结:
这道题主要知识点有字符串的常见操作(replace()、toUpperCase()、startsWith()、trim())、IO流、进制转换等。

发布了27 篇原创文章 · 获赞 2 · 访问量 933

猜你喜欢

转载自blog.csdn.net/wcy8733996wcy/article/details/104409443