后缀表达式(java实现)
来源:互联网 发布:i3电脑能编程吗 编辑:程序博客网 时间:2024/06/06 08:39
意外地求后缀表达式的笔试题挺多的
一个对于一个单行的逆波兰表达式,由如下元素构成:
数字:十进制数字字符构成的正整数,比如 223
运算符:支持三种运算符^+和*,分别代表自增,加法和乘法
分隔符:一个或者多个空格
例如下面的字符串就是个逆波兰表达式
2 3 4 * ^ 5 +
逆波兰表达式在一个基于栈的虚拟机中求解,虚拟机的栈能保存16个整数,虚拟机从左向右扫描表达式,遇到整数就压栈,
遇到表达式则从栈顶弹出若干个整数进行计算,计算结果重新压回栈中。其中运算符^从栈顶弹出一个整数,增加1之后压栈;
运算符+和*从栈顶弹出两个整数,分别做相加和相乘运算后压栈。如果遇到运算符的时候,栈内没有足够的整数,称为下溢出,返回-1;
把整数压栈的时候,如果栈没有足够的空间,称为上溢出,返回-2;如果整个计算过程中没有发生溢出,在整个表达式求解完成后,返回栈顶的整数。
public class Main { public static void main(String[] args) { ArrayList<Integer> inputs = new ArrayList<Integer>(); Scanner in = new Scanner(System.in); String line = in.nextLine(); if (line != null && !line.isEmpty()) { int res = resolve(line.trim()); System.out.println(String.valueOf(res)); } } // write your code here public static int resolve(String expr) { //字符串判空不能用"==" if(expr.equals("")||expr==null) return -1; expr = expr.replaceAll(" ", ""); int N = expr.length(); Stack<Integer> stack = new Stack<Integer>(); char c1; int tmp1, tmp2; for (int i = 0; i < N; i++) { c1 = expr.charAt(i); if (c1 != '^' && c1 != '+' && c1 != '*') { stack.push((int) (c1 - '0')); if (stack.size() > 16) return -2; } else { switch (c1) { case '^': if (stack.isEmpty()) return -1; int tmp = stack.pop(); stack.push(++tmp); break; case '+': if (stack.isEmpty()) return -1; tmp1 = stack.pop(); if (stack.isEmpty()) return -1; tmp2 = stack.pop(); stack.push(tmp1 + tmp2); break; case '*': if (stack.isEmpty()) return -1; tmp1 = stack.pop(); if (stack.isEmpty()) return -1; tmp2 = stack.pop(); stack.push(tmp1 * tmp2); break; } } } return stack.pop(); } }
阅读全文
0 0
- 后缀表达式(java实现)
- 后缀表达式的java实现
- 中缀表达式转换到后缀表达式(java实现)
- 中缀表达式转换后缀表达式并求值(java实现)
- 中缀表达式转换后缀表达式并求值(java实现)
- java 实现中缀表达式转为后缀表达式
- 中缀表达式、后缀表达式 Java实现
- java后缀表达式实现表达式求值
- 使用堆栈计算后缀表达式--java实现
- 后缀表达式的计算器Java实现
- java使用后缀表达式实现计算器
- 【java】中缀表达式转后缀表达式 java实现
- 中缀表达式转换为前缀及后缀表达式并求值(java实现)
- Java 栈实现中缀表达式转后缀表达式
- JAVA实现中缀表达式转换为后缀表达式并计算
- java实现中缀表达式转后缀表达式并且计算
- 中缀表达式转后缀表达式java精确实现
- Java实现中缀表达式转后缀表达式并计算结果
- 不要使用sun.misc.BASE64
- UVA540 TeamQueue【map+queue】
- HDU1272小希的迷宫
- C++动态内存分配
- VBA中让程序休眠 SLeep的方法
- 后缀表达式(java实现)
- 张廷玉代码
- Javascript 自执行函数(匿名函数)
- Android 屏幕分辨率
- [练习]如何用CSS进行网页布局
- 系统延迟及定时任务
- xmanday2 IDA逆向从入门到放弃
- 解决Python中浮点数计算结果不够精确的问题:decimal模块
- Python之类的继承和多态