【栈】C037_LQ_小计算器(不用栈)
程序员文章站
2022-06-08 22:21:46
...
模拟程序型计算器,依次输入指令,可能包含的指令有
- 数字:‘NUM X’,X为一个只包含大写字母和数字的字符串,表示一个当前进制的数
- 运算指令:‘ADD’,‘SUB’,‘MUL’,‘DIV’,‘MOD’,分别表示加减乘,除法取商,除法取余
- 进制转换指令:‘CHANGE K’,将当前进制转换为K进制(2≤K≤36)
- 输出指令:‘EQUAL’,以当前进制输出结果
- 重置指令:‘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
补充说明:
- n 值范围: 1<= n < 50000
- 初始默认的进制是十进制
方法一:模拟
…
import java.util.*;
import java.math.*;
import java.io.*;
public class Main{
static class Solution {
final static String Num="NUM", Clear="CLEAR", Change="CHANGE", Out="EQUAL";
final static int ADD=1, SUB=2, MUL=3, DIV=4, MOD=5;
int calcType=-1, radix=10;
long num;
void tryCalc(String o) {
long other = Long.parseLong(o, radix); //从radix进制转为十进制
if (calcType == -1) {
num=other;
} else {
switch(calcType) {
case ADD: num+=other; break;
case SUB: num-=other; break;
case MUL: num*=other; break;
case DIV: num/=other; break;
case MOD: num%=other; break;
}
calcType=-1;
}
}
void init() {
Scanner sc = new Scanner(new BufferedInputStream(System.in));
int n=sc.nextInt();
Map<String, Integer> opmap = new HashMap<>();
opmap.put("ADD", 1); opmap.put("SUB", 2); opmap.put("MUL", 3); opmap.put("DIV", 4); opmap.put("MOD", 5);
sc.nextLine();
for (int i=0; i<n; i++) {
String s=sc.nextLine();
if (s.contains(" ")) { //有空格
String ss[] = s.split(" ");
if (ss[0].equals(Num)) {
tryCalc(ss[1]);
} else if (ss[0].equals(Change)) { //进制转换
radix=Integer.parseInt(ss[1]);
}
} else if (s.equals(Out)) {
System.out.println(Long.toString(num, radix));
} else if (s.equals(Clear)) {
num=0;
} else if (opmap.containsKey(s)) { //运算符
calcType = opmap.get(s);
}
}
}
}
public static void main(String[] args) throws IOException {
Solution s = new Solution();
s.init();
}
}
复杂度分析
- Time:,
- Space:
上一篇: 写一个移动端惯性滑动&回弹Vue导航栏组件 ly-tab
下一篇: 口碑营销6大途径
推荐阅读
-
通过栈实现简单综合计算器,使用字符串并不完善(中缀表达式)
-
leetcode 277 基本计算器 Basic Calculator II (单栈,单次遍历,思路简单)
-
微信小程序开发(三):返回上一级页面并刷新操作示例【页面栈】
-
PHP栈的定义、入栈出栈方法及基于堆栈实现的计算器完整实例
-
2019Hexo博客Next主题深度美化 打造一个炫酷博客(2)-奥怪的小栈
-
面试王者的出装方案推荐——软技能篇(文末含岗位内推)-超哥前端小栈-SegmentFault思否
-
【栈】C037_LQ_小计算器(不用栈)
-
数据结构 栈(顺序栈,链式栈,用栈实现计算器)
-
栈的应用——编写简单计算器
-
栈的基本操作及 两个小应用