2021.01.29小型计算器
题目描述
模拟程序型计算器,依次输入指令,可能包含的指令有:
- 数字:‘NUM X’,X为一个只包含大写字母和数字的字符串,表示一个当前进制的数
- 运算指令:‘ADD’,‘SUB’,‘MUL’,‘DIV’,‘MOD’,分别表示加减乘,除法取商,除法取余
- 进制转换指令:‘CHANGE K’,将当前进制转换为K进制(2≤K≤36)
- 输出指令:‘EQUAL’,以当前进制输出结果
- 重置指令:‘CLEAR’,清除当前数字
指令按照以下规则给出:
- 数字,运算指令不会连续给出,进制转换指令,输出指令,重置指令有可能连续给出
- 运算指令后出现的第一个数字,表示参与运算的数字。且在该运算指令和该数字中间不会出现运算指令和输出指令
- 重置指令后出现的第一个数字,表示基础值。且在重置指令和第一个数字中间不会出现运算指令和输出指令
- 进制转换指令可能出现在任何地方
样例输入
7
CLEAR
NUM 1024
CHANGE 2
ADD
NUM 100000
CHANGE 8
EQUAL
样例输出
2040
数据规模和约定
运算过程中中间变量均为非负整数,且小于2^63。
以大写的’A’'Z’表示1035
思路
- 由于小于2^63,所以采用long型。
- 观察题目中:NUM出现只有两种情况:①和运算命令一同出现 ②和CLEAR命令一同出现。而CLEAR命令可以看成是0加上给定的数字,所以可以将NUM命令和运算命令绑定,即先通过运算命令明确运算规则,再通过NUM命令得到需要运算的数字。
- 由于题目中要进行进制转换,而非十进制的运算过于麻烦,所以可以用一个十进制变量和一个记录进制的整型变量记录计算器中的数字状态,输出时只需要调用java中的进制转换API即可。