算法训练 表达式计算  时间限制:1.0s   内存限制:256.0MB问题描述输入一个只包含加减乖除和括号的合法表达式,求表达式的值。其中除表示整除。输入格式输入一行,包含一个表达式。输出格式输出这个表达式的值。样例输入1-2+3*(4-5)样例输出-4数据规模和约定表达式长度不超过100,表达式运算合法且运算过程都在int内进行。

解题思路:这个题目看起来很简单,但是其实是不简单的,这个需要运用栈的知识,然后需要把中缀表达式转后缀表达式来进行计算,如果不太清楚建议看一下栈的知识。

package com.sihai.advance;
import java.util.Scanner;
import java.util.Stack;public class biaodashi {public static void main(String[] args) {// TODO Auto-generated method stubScanner scanner = new Scanner(System.in);Stack<Integer> nums = new Stack<Integer>(); // 保存数字Stack<Character> opes = new Stack<Character>(); // 保存操作符String string = scanner.nextLine();int n = 0; // 保存每一个数字char[] cs = string.toCharArray();for (int i = 0; i < cs.length; i++) {char temp = cs[i];if (Character.isDigit(cs[i])) {n = 10 * n + Integer.parseInt(String.valueOf(cs[i])); // 大于10的数字保存} else {if (n != 0) {nums.push(n);n = 0;}if (temp == '(') {opes.push(temp);} else if (temp == ')') {while (opes.peek() != '(') { // 括号里面运算完int t = cal(nums.pop(), nums.pop(), opes.pop());nums.push(t);}opes.pop();} else if (isType(temp) > 0) {if (opes.isEmpty()) { // 栈为空直接入栈opes.push(temp);} else {// 若栈顶元素优先级大于或等于要入栈的元素,将栈顶元素弹出并计算,然后入栈if (isType(opes.peek()) >= isType(temp)) {int t = cal(nums.pop(), nums.pop(), opes.pop());nums.push(t);}opes.push(temp);}}}}// 最后一个字符若是数字,未入栈if (n != 0) {nums.push(n);}while (!opes.isEmpty()) {int t = cal(nums.pop(), nums.pop(), opes.pop());nums.push(t);}System.out.println(nums.pop());}// 返回的是运算符的优先级,数字和()不需要考虑public static int isType(char c) {if (c == '+' || c == '-') {return 1;} else if (c == '*' || c == '/') {return 2;} else {return 0;}}// 运算次序是反的,跟入栈出栈次序有关public static int cal(int m, int n, char c) {int sum = -987654321;if (c == '+') {sum = n + m;} else if (c == '-') {sum = n - m;} else if (c == '*') {sum = n * m;} else if (c == '/') {sum = n / m;}return sum;}
}

蓝桥杯-表达式计算(java)相关推荐

  1. 蓝桥杯日期计算java_日期类的使用(java)-蓝桥杯

    蓝桥杯日期问题常考,java提供了日期类很方便: //日历类 Calendar c = Calendar.getInstance(); // 获取实例化对象 Date date =c.getTime( ...

  2. 蓝桥杯-Sine之舞-java

    蓝桥杯-Sine之舞-java 题目 问题描述最近FJ为他的奶牛们开设了数学分析课,FJ知道若要学好这门课,必须有一个好的三角函数基本功.所以他准备和奶牛们做一个"Sine之舞"的 ...

  3. java后缀表达式_表达式计算 java 后缀表达式

    题目: 问题描述 输入一个只包含加减乖除和括号的合法表达式,求表达式的值.其中除表示整除. 输入格式 输入一行,包含一个表达式. 输出格式 输出这个表达式的值. 样例输入 1-2+3*(4-5) 样例 ...

  4. 2013蓝桥杯java试题_蓝桥杯2013决赛java本科b组试题.doc

    蓝桥杯2013决赛java本科b组试题.doc 试题一:公式求值问题描述输入n,m,k,输出下面公式的值.其中C_n^m是组合数,表示在n个人的集合中选出m个人组成一个集合的方案数.组合数的计算公式如 ...

  5. 2021第十二届蓝桥杯省赛JAVA B组 题目+答案(复现赛)

    2021第十二届蓝桥杯省赛JAVA B组 题目+答案(复现赛) A:ASC B:卡片 C:直线 D:货物摆放 E:路径 Floyed Dijkstra F:时间显示 G:最少砝码 H:杨辉三角形 I: ...

  6. 蓝桥杯-最大最小公倍数java语言

    蓝桥杯-最大最小公倍数java语言 开局一句话: 做这道题的时候,便没有对最小公倍数十分了解,就直接写了,也是惭愧,走了太多弯路,后来才知道,最小公倍数不是单单的几个数相乘就完了. 问题描述: 已知一 ...

  7. 2020年第十一届蓝桥杯 - 国赛 - Java研究生组 - F.循环小数

    2020年第十一届蓝桥杯 - 国赛 - Java研究生组 - F.循环小数 在线评测 Ideas 对于一个纯循环小数,假设循环节为l,则小数为0.llll-,转换为分数就是 l / (10 ** n ...

  8. java迷宫类编程题_第十届蓝桥杯省赛java类B组 试题 E:迷宫 (动态规划之回溯法)...

    问题描述 试题 E: 迷宫 [问题描述] 下图给出了一个迷宫的平面图,其中标记为 1 的为障碍,标记为 0 的为可 以通行的地方. 010000 000100 001001 110000 迷宫的入口为 ...

  9. 第十二届蓝桥杯省赛JAVA B组杨辉三角形个人题解

    第十二届蓝桥杯省赛JAVA B组杨辉三角形个人题解(非满分) import java.util.Scanner; public class Main {public static void main( ...

最新文章

  1. 微信小程序 - 富文本图片宽度自适应(正则)
  2. JS发送跨域Post请求出现两次请求的解决办法
  3. 日常SQL常见问题(二)
  4. android 活动外的类,Android – 活动外的startActivityForResult?
  5. 分摊、分配、定期重过账
  6. 手机访问同局域网下的PC中Tomcat中的项目
  7. Matlab神经网络十讲(7): Self-Organizing and LVQ Networks
  8. 00018计算机应用基础2019年4月,2019年4月自考计算机应用基础考前试题和答案00018.pdf...
  9. java 动态添加定时器_Spring整合Quartz实现动态定时器的示例代码
  10. docker常见面试题_测试面试题集锦(四)| Linux 与 Python 编程篇(附答案)
  11. 数据挖掘的好书_唐宇迪:入门数据挖掘,我最推荐这本书
  12. 96.不同的二叉搜索树(JavaScript)
  13. 白话基础之虚拟存储器
  14. 图表下面的文字怎么变竖排_Excel中如何制作多维组合图表?
  15. 【读书笔记】触摸屏游戏设计
  16. Mac配置vscode ssh远程连接主机(远程办公必备)
  17. brew 镜像_ps镜像快捷键,ps镜像图片效应功能怎么用?
  18. 多轮对话之对话管理(Dialog Management)
  19. windows删除桌面右键“英特尔@显卡设置”
  20. 1320. 拯救奶牛

热门文章

  1. ubuntu 12.04下apache 配置家目录地址
  2. 操作系统习题5—存储管理
  3. (chap1 网络基础知识)通信类型
  4. javaweb_JSP 中文字符处理程序
  5. Tomcat下使用Druid配置JNDI数据源
  6. python网络编程—Socket
  7. GPTEE中的Storage API的使用
  8. [羊城杯 2020]Power
  9. 2020-12-12(c++多维数组的反编译观察)
  10. 一次代码审计实战案例【思路流程】