蓝桥杯-表达式计算(java)
算法训练 表达式计算 时间限制: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)相关推荐
- 蓝桥杯日期计算java_日期类的使用(java)-蓝桥杯
蓝桥杯日期问题常考,java提供了日期类很方便: //日历类 Calendar c = Calendar.getInstance(); // 获取实例化对象 Date date =c.getTime( ...
- 蓝桥杯-Sine之舞-java
蓝桥杯-Sine之舞-java 题目 问题描述最近FJ为他的奶牛们开设了数学分析课,FJ知道若要学好这门课,必须有一个好的三角函数基本功.所以他准备和奶牛们做一个"Sine之舞"的 ...
- java后缀表达式_表达式计算 java 后缀表达式
题目: 问题描述 输入一个只包含加减乖除和括号的合法表达式,求表达式的值.其中除表示整除. 输入格式 输入一行,包含一个表达式. 输出格式 输出这个表达式的值. 样例输入 1-2+3*(4-5) 样例 ...
- 2013蓝桥杯java试题_蓝桥杯2013决赛java本科b组试题.doc
蓝桥杯2013决赛java本科b组试题.doc 试题一:公式求值问题描述输入n,m,k,输出下面公式的值.其中C_n^m是组合数,表示在n个人的集合中选出m个人组成一个集合的方案数.组合数的计算公式如 ...
- 2021第十二届蓝桥杯省赛JAVA B组 题目+答案(复现赛)
2021第十二届蓝桥杯省赛JAVA B组 题目+答案(复现赛) A:ASC B:卡片 C:直线 D:货物摆放 E:路径 Floyed Dijkstra F:时间显示 G:最少砝码 H:杨辉三角形 I: ...
- 蓝桥杯-最大最小公倍数java语言
蓝桥杯-最大最小公倍数java语言 开局一句话: 做这道题的时候,便没有对最小公倍数十分了解,就直接写了,也是惭愧,走了太多弯路,后来才知道,最小公倍数不是单单的几个数相乘就完了. 问题描述: 已知一 ...
- 2020年第十一届蓝桥杯 - 国赛 - Java研究生组 - F.循环小数
2020年第十一届蓝桥杯 - 国赛 - Java研究生组 - F.循环小数 在线评测 Ideas 对于一个纯循环小数,假设循环节为l,则小数为0.llll-,转换为分数就是 l / (10 ** n ...
- java迷宫类编程题_第十届蓝桥杯省赛java类B组 试题 E:迷宫 (动态规划之回溯法)...
问题描述 试题 E: 迷宫 [问题描述] 下图给出了一个迷宫的平面图,其中标记为 1 的为障碍,标记为 0 的为可 以通行的地方. 010000 000100 001001 110000 迷宫的入口为 ...
- 第十二届蓝桥杯省赛JAVA B组杨辉三角形个人题解
第十二届蓝桥杯省赛JAVA B组杨辉三角形个人题解(非满分) import java.util.Scanner; public class Main {public static void main( ...
最新文章
- 微信小程序 - 富文本图片宽度自适应(正则)
- JS发送跨域Post请求出现两次请求的解决办法
- 日常SQL常见问题(二)
- android 活动外的类,Android – 活动外的startActivityForResult?
- 分摊、分配、定期重过账
- 手机访问同局域网下的PC中Tomcat中的项目
- Matlab神经网络十讲(7): Self-Organizing and LVQ Networks
- 00018计算机应用基础2019年4月,2019年4月自考计算机应用基础考前试题和答案00018.pdf...
- java 动态添加定时器_Spring整合Quartz实现动态定时器的示例代码
- docker常见面试题_测试面试题集锦(四)| Linux 与 Python 编程篇(附答案)
- 数据挖掘的好书_唐宇迪:入门数据挖掘,我最推荐这本书
- 96.不同的二叉搜索树(JavaScript)
- 白话基础之虚拟存储器
- 图表下面的文字怎么变竖排_Excel中如何制作多维组合图表?
- 【读书笔记】触摸屏游戏设计
- Mac配置vscode ssh远程连接主机(远程办公必备)
- brew 镜像_ps镜像快捷键,ps镜像图片效应功能怎么用?
- 多轮对话之对话管理(Dialog Management)
- windows删除桌面右键“英特尔@显卡设置”
- 1320. 拯救奶牛