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流、进制转换等。