LQOJ ALGO-156 表达式计算
来源:互联网 发布:手机淘宝销量排名 编辑:程序博客网 时间:2024/06/05 16:54
表达式计算
问题描述
输入一个只包含加减乖除和括号的合法表达式,求表达式的值。其中除表示整除。
输入格式
输入一行,包含一个表达式。
输出格式
输出这个表达式的值。
样例输入
1-2+3*(4-5)
样例输出
-4
数据规模和约定
表达式长度不超过100,表达式运算合法且运算过程都在int内进行。
解题代码
import java.util.*;public class Main { public static void main(String[] args) { Scanner sr = new Scanner(System.in); Queue postfix = getPostfix(sr.next()); int result = getResult(postfix); System.out.println(result); } private static int getResult(Queue postfix) { Stack<Integer> numbers = new Stack<Integer>(); while(!postfix.isEmpty()){ Object temp = postfix.poll(); if(temp instanceof Integer) numbers.push((Integer)temp); else{ int numB = numbers.pop(); int numA = numbers.pop(); switch ((Character)temp) { case '+': numA += numB; break; case '-': numA -= numB; break; case '*': numA *= numB; break; case '/': numA /= numB; break; } numbers.push(numA); } } return numbers.get(0); } private static Queue getPostfix(String ss) { Stack<Character> ops = new Stack<Character>(); Queue<Object> postfixs = new LinkedList<Object>(); for(int i=0;i<ss.length();i++){ char temp = ss.charAt(i); if(Character.isDigit(temp)){ int number = 0; while(i < ss.length() && Character.isDigit(ss.charAt(i))){ number = number*10 + Integer.parseInt(ss.substring(i,i+1)); i++; } i--; postfixs.offer(number); } else if(temp == '(') ops.push(temp); else if(temp == ')'){ char popChar = ops.pop(); while(popChar != '('){ postfixs.offer(popChar); popChar = ops.pop(); } } else{ int rank = getRank(temp); if(ops.isEmpty() || rank > getRank(ops.peek())) ops.push(temp); else { while(!ops.isEmpty() && rank <= getRank(ops.peek())) postfixs.offer(ops.pop()); ops.push(temp); } } } while(!ops.isEmpty()) postfixs.offer(ops.pop()); return postfixs; } private static int getRank(char c){ switch (c) { case '+': case '-': return 1; case '*': case '/': return 2; } return -1; }}
0 0
- LQOJ ALGO-156 表达式计算
- ALGO-156表达式计算
- 蓝桥杯试题集ALGO-156(表达式计算)
- 蓝桥杯 ALGO-156 表达式计算(栈)
- 蓝桥杯 算法训练 ALGO-156 表达式计算
- ALGO-156 表达式计 算蓝桥杯
- 蓝桥杯 ALGO-92 前缀表达式
- 蓝桥杯 ALGO-92前缀表达式
- 蓝桥杯ALGO-92前缀表达式
- 蓝桥杯 ALGO-62 算法训练 平方计算
- 蓝桥杯 ALGO-99 算法训练 薪水计算
- 蓝桥杯 ALGO-92 前缀表达式(水题)
- 蓝桥杯 ALGO-92 算法训练 前缀表达式
- 蓝桥杯 ALGO-92 算法训练 前缀表达式
- 蓝桥杯 ALGO-67 算法训练 最大值与最小值的计算
- 蓝桥杯 ALGO-67 算法训练 最大值与最小值的计算
- 表达式计算
- 表达式计算
- OpenCV On Android环境配置最新&最全指南(Eclipse篇)
- 重写和继承关系中的构造方法
- Matlab coder 踩过的那些坑
- 常用的字符串加密解密工具类
- Linux(五) 之 bash工作原理
- LQOJ ALGO-156 表达式计算
- Mac下安装iPython
- Android5.0后的ViewGroup添加子View问题
- 对于VS2012的位图无法加载到资源视图“Bitmap”中的解决方案
- android MediaPlayer简易播放器
- C++之lib和dll实例及简单分析
- day30_struts2_valueStack
- STM32使用MCUISP下载程序教程
- Linux-ubuntu 日记( 2 )- 建立一个MySQL数据库