蓝桥杯——历届试题 小计算器 代码未完善,有未解决的问题

问题描述

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


  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'表示10~35

输入格式

  第1行:1个n,表示指令数量
  第2..n+1行:每行给出一条指令。指令序列一定以'CLEAR'作为开始,并且满足指令规则

输出格式

  依次给出每一次'EQUAL'得到的结果

样例输入

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

样例输出

2040

-----------------------------------------------------------

最主要的是进制转换。

static String change(String s,int a,int b) { //进制转换
		return new BigInteger(s,a).toString(b);
//		return Integer.parseInt(new BigInteger(s,a).toString(b));
	}

整了又整,还是有错。

这篇是借鉴的。蓝桥杯 历届试题 小计算器(Java)

根据他的代码,我修改了我的。

package t2;

import java.math.BigInteger;
import java.util.Scanner;

public class JiSuanQi_2 {
	
	static int JinZhi = 10; //进制
	static String begin = "0"; //起始值
	static String op = ""; //运算符
	
	
	static String change(String s,int a,int b) { //进制转换
		return new BigInteger(s,a).toString(b);
//		return Integer.parseInt(new BigInteger(s,a).toString(b));
	}
	
	static long operate(long f,long s) {
		long sum = 0;
		switch(op) {
		    case "ADD":
		    	sum = f+s;
		    	break;
		    case "SUB":
		    	sum = f-s;
		    	break;
		    case "MUL":
		    	sum = f*s;
		    	break;	
		    case "DIV":
		    	sum = f/s;
		    	break;	
		    case "MOD":
		    	sum = f%s;
		    	break;			    			    			    			    			    	
		}
		return sum;
	}
	
	public static void main(String[] args) {
		
		Scanner cin = new Scanner(System.in);
		int sum = cin.nextInt();
		String[] sss = new String[sum+1];
		for(int i=0;i<=sum;i++) {
			sss[i] = cin.nextLine();
			String[] num = sss[i].split(" ");
//			String[] num = cin.nextLine().split(" ");
			
			switch(num[0]) {
			    case "NUM":
			    	if(begin.equals("0")) {
			    		begin =num[1];
			    	}
			    	
			    	else {
			    		long first = new BigInteger(change(begin,JinZhi,10)).longValue();
		    			long second = new BigInteger(change(num[1],JinZhi,10)).longValue();
		    			begin = change(operate(first,second)+"",10,JinZhi);
			    	}
			    	
			    	break;
			    case "ADD":
			    	op = "ADD";
			    	break;
			    case "SUB":
			    	op = "SUB";
			    	break;	
			    case "MUL":
			    	op = "MUL";
			    	break;	
			    case "DIV":
			    	op = "DIV";
			    	break;	
			    case "MOD":
			    	op = "MOD";
			    	break;
			    case "CHANGE":
			    	begin = change(begin,JinZhi,Integer.parseInt(num[1]));
			    	JinZhi = Integer.parseInt(num[1]);			    	
			    	break;	
			    case "EQUAL":
			    	System.out.println(begin);
			    	break;	
			    case "CLEAR":
			    	begin = "0";
			    	break;	
			    	
			    	
			    	
			}
			
		}
		
		cin.close();

		

	}

}

蓝桥杯——历届试题 小计算器 代码未完善,有未解决的问题_第1张图片

只有10分啊,我也不知道错哪了,有点烦。

 

我第一遍太麻烦,用了很多subString,看起来很麻烦。吸取经验后,换成了split,并且加入了switch-case,这个我其实并不常用,所以没想起来。

第一遍的代码。这就是黑历史。。。

package t2;

import java.math.BigInteger;
import java.util.Scanner;

public class JiSuanQi {
	
	static long change(String s,int a,int b) {
//		return new BigInteger(s,a).toString(b);
		return Integer.parseInt(new BigInteger(s,a).toString(b));
	}
	
	class Op{
		long a;
		long b;
		public Op(long a, long b) {
			this.a = a;
			this.b = b;
		}
		public Op() {}
		public long getA() {
			return a;
		}
		public void setA(long a) {
			this.a = a;
		}
		public long getB() {
			return b;
		}
		public void setB(long b) {
			this.b = b;
		}
		public long Add() {
			return a+b;
		}
		public long Sub() {
			return a-b;
		}
		public long Mul() {
			return a*b;
		}
		public long Div() {
			return a/b;
		}
		public long Mod() {
			return a%b;
		}
		
		
	}
	
	static long num(String s) {
		return Integer.parseInt(s.substring(4));
	}

	public static void main(String[] args) {
		
		Scanner cin = new Scanner(System.in);
		int sum = cin.nextInt();
		
		
		int JinZhi = 10;
		long begin = 0;
//		long n = 0;
		
		String[] sss = new String[sum+2];
		
		for(int i=1;i<=sum;i++) {
			sss[i] = cin.next();
		}
		
		int m = 0;
		
		for(int i=1;i<=sum;i++) {
			while(sss[i].substring(0,2).equals("NUM")) {
				m = i;
				begin = Integer.parseInt(sss[i].substring(4));
			}
			if(m!=0)
				break;
		}
		
		for(int i=2;i<=sum;i++) {
			if(sss[i].equals("CLEAR")||sss[i].equals("EQUAL")) {
				if(sss[i].equals("CLEAR")) {
					begin = 0;
				}
				if(sss[i].equals("EQUAL")) {
					System.out.println("最终结果"+begin);
				}
			}
			else {
				if(sss[i].substring(0,5).equals("CHANGE")) {
					int k = Integer.parseInt(sss[i].substring(7));
					begin = change(sss[i].substring(7),JinZhi,k);
					JinZhi =k;
				}
				else {
					String st = sss[i].substring(0,2);
					JiSuanQi jsq = new JiSuanQi();
					long end = Integer.parseInt(sss[i+1].substring(4));
					if(JinZhi != 10) {
						String beg = begin+"";
						begin = change(beg,JinZhi,10);
						end = change(sss[i+1].substring(4),JinZhi,10);
					}
					Op op = jsq.new Op(begin,end);
					if(st.equals("ADD")) {
						
						begin = op.Add();
					}
					if(st.equals("SUB")) {
						begin = op.Sub();
					}
					if(st.equals("MUL")) {
						begin = op.Mul();
					}
					if(st.equals("DIV")) {
						begin = op.Div();
					}
					if(st.equals("MOD")) {
						begin = op.Mod();
					}
					begin = change(begin+"",10,JinZhi);
				}
					
					
					
			}
			
		}
		
      cin.close();
	}

	
}

蓝桥杯——历届试题 小计算器 代码未完善,有未解决的问题_第2张图片

 

遇到这个错误之后我没再管。

直接搜了别人写的,然后修改。

 

遇到的问题及相关文章

1.  字符串角标越界异常

2.  数组越界   Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
3.  空指针异常  java.lang.NullPointerException出现的几种原因以及解决 

4. java.lang.NumberFormatException: For input string: "10000000000"

    将String类型转换为Integer类型爆出此异常

        将      long second = Integer.parseInt(num[1]);   

    修改为   long second = new BigInteger(num[1]).longValue();

 

5. int和integer的区别

6. BufferedReader reader= new BufferedReader(new InputStreamReader(System.in))解读

    java中的new BufferedReader(new InputStreamReader(System.in))

7. java8中的default关键字

8. java中的char类型

       

未解决的问题

蓝桥杯——历届试题 小计算器 代码未完善,有未解决的问题_第3张图片

为什么啊,他为什么要有一个空的???

不懂。 

你可能感兴趣的:(蓝桥杯,做题记录)