蓝桥杯JAVA版答案——历年真题——小计算器

更多JAVA版答案移步我的博客:蓝桥杯JAVA版答案汇总

本题考查

模拟

思路

思路很简单不做赘述,题目要求说的很明确。

  • 为了便于进制转换:
    X进制转10进制使用Long.valueOf(num, X)(此时num为X进制数字)
    10进制转Y进制使用Long.toString(num, Y)(此时num为10进制数字)

  • 几个容易忽视的点:

    1. 本题说中间变量小于263,所以应该用Long类型
    2. java默认的进制转换字母是小写要转换为大写
    3. clear操作后面可以紧跟着change操作,所以当进行change时要判断此时的结果result是不是空字符串,若不是的话将result转化为目标进制

AC代码

import java.util.Scanner;
public class Main {
     
	static String result="";
	static String temp="";
	static String cal="";
	static int radix=10;
	
	static void add() {
     cal="add";}									//加法
	static void sub() {
     cal="sub";}									//减法
	static void mul() {
     cal="mul";}									//乘法
	static void div() {
     cal="div";}									//除法
	static void mod() {
     cal="mod";}									//取余
	static void clear() {
     result="";	temp=""; cal="";}				//重置
	static void equal() {
     System.out.println(result.toUpperCase());}	//输出结果
	static void change(int newRadix) {
     								//改变进制
		if(!result.equals("")) {
     
			long oldValue = Long.valueOf(result, radix);
			result = Long.toString(oldValue, newRadix);
		}
		radix = newRadix;
	}
	static void num(String num) {
     									//添加操作数
		if(result.equals(""))	result=num;
		else {
     
			temp=num;
			if(cal.equals("add"))		result = Long.toString((Long.valueOf(result, radix)+Long.valueOf(temp, radix)), radix);
			else if(cal.equals("sub"))	result = Long.toString((Long.valueOf(result, radix)-Long.valueOf(temp, radix)), radix);
			else if(cal.equals("mul"))	result = Long.toString((Long.valueOf(result, radix)*Long.valueOf(temp, radix)), radix);
			else if(cal.equals("div"))	result = Long.toString((Long.valueOf(result, radix)/Long.valueOf(temp, radix)), radix);
			else						result = Long.toString((Long.valueOf(result, radix)%Long.valueOf(temp, radix)), radix);
		}
	}

	public static void main(String[] args) {
     
		Scanner scaner = new Scanner(System.in);
		int round = scaner.nextInt();
		for (int i = 0; i < round; i++) {
     
			String command = scaner.next();
			if(command.equals("CLEAR"))			clear();
			else if(command.equals("EQUAL"))	equal();
			else if(command.equals("CHANGE"))	change(scaner.nextInt());
			else if(command.equals("ADD"))		add();
			else if(command.equals("SUB"))		sub();
			else if(command.equals("MUL"))		mul();
			else if(command.equals("DIV"))		div();
			else if(command.equals("MOD"))		mod();
			else								num(scaner.next());
		}
		scaner.close();
	}
}

你可能感兴趣的:(蓝桥杯,JAVA)