• Java实现 蓝桥杯 历届试题 小计算器


    历届试题 小计算器
    时间限制:1.0s 内存限制:256.0MB

    问题描述
      模拟程序型计算器,依次输入指令,可能包含的指令有

    1. 数字:‘NUM X’,X为一个只包含大写字母和数字的字符串,表示一个当前进制的数
      2. 运算指令:‘ADD’,‘SUB’,‘MUL’,‘DIV’,‘MOD’,分别表示加减乘,除法取商,除法取余
      3. 进制转换指令:‘CHANGE K’,将当前进制转换为K进制(2≤K≤36)
      4. 输出指令:‘EQUAL’,以当前进制输出结果
      5. 重置指令:‘CLEAR’,清除当前数字

    指令按照以下规则给出:
      数字,运算指令不会连续给出,进制转换指令,输出指令,重置指令有可能连续给出
      运算指令后出现的第一个数字,表示参与运算的数字。且在该运算指令和该数字中间不会出现运算指令和输出指令
      重置指令后出现的第一个数字,表示基础值。且在重置指令和第一个数字中间不会出现运算指令和输出指令
      进制转换指令可能出现在任何地方

    运算过程中中间变量均为非负整数,且小于2^63。
      以大写的’A’'Z’表示1035
    输入格式
      第1行:1个n,表示指令数量
      第2…n+1行:每行给出一条指令。指令序列一定以’CLEAR’作为开始,并且满足指令规则
    输出格式
      依次给出每一次’EQUAL’得到的结果
    样例输入
    7
    CLEAR
    NUM 1024
    CHANGE 2
    ADD
    NUM 100000
    CHANGE 8
    EQUAL
    样例输出
    2040

    这道题我只能过70分,还请路过的大佬帮忙指点指点
    import java.math.BigInteger;
    import java.util.Scanner;
    import java.util.StringTokenizer;
    
    
    public class 小计算器 {
    	public static void main(String[] args) {
    		@SuppressWarnings("resource")
    		Scanner in = new Scanner(System.in);
    		int  n = in.nextInt();
     
    		
    		String command;
    		BigInteger res = null;
    		boolean isStart = false;
    		int ope = 0;
    		int PN = 10;
    		in.nextLine();		
    		for(int i = 0; i < n; i++){
    			StringTokenizer stringTokenizer = new StringTokenizer(in.nextLine());
    			command = stringTokenizer.nextToken();
    				if(command.equals("CHANGE")){
    					String str = stringTokenizer.nextToken();
    					PN = Integer.parseInt(str);
    				}
    				else if(command.equals("EQUAL")){
    					String string  = res.toString(PN).toUpperCase();
    					System.out.println(string);
    				}
    				else if(command.equals("NUM")){
    					String str = stringTokenizer.nextToken();
    					String num = Long.valueOf(str, PN).toString();
    					if(isStart == true){
    						res = new BigInteger(num);
    						isStart =false;
    					}
    					else{
    						switch (ope) {
    							case 1:
    								res = res.add(new BigInteger(num));
    								break;
    							case 2:
    								res = res.subtract(new BigInteger(num));
    								break;
    							case 3:
    								res = res.divide(new BigInteger(num));
    								break;
    							case 4:
    								res = res.multiply(new BigInteger(num));
    								break;
    							case 5:
    								res = res.mod(new BigInteger(num));
    								break;
    							default:
    								break;
    						}
    					}
    				}
    				else if(command.equals("ADD")){
    					ope = 1;
    				}
    				else if(command.equals("SUB")){
    					ope = 2;
    				}
    				else if(command.equals("DIV")){
    					ope = 3;
    				}
    				else if(command.equals("MUL")){
    					ope = 4;
    				}
    				else if(command.equals("MOD")){
    					ope = 5;
    				}
    				else if(command.equals("CLEAR")){
    					res = new BigInteger("0");
    					isStart = true;
    				}
    		}
    	}
    
    }
    
    
  • 相关阅读:
    01-发送你的第一个请求
    postman使用
    java poi导出多sheet页
    base64加密解密
    Django crontab
    super().__init__()
    paramiko模块
    列表转json数据返回
    socket模块判断ip加端口的连通性
    登录拦截器
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13078788.html
Copyright © 2020-2023  润新知