http://lx.lanqiao.cn/problem.page?gpid=T419         
算法训练 表达式计算  
时间限制:1.0s   内存限制:256.0MB
问题描述
输入一个只包含加减乖除和括号的合法表达式,求表达式的值。其中除表示整除。
输入格式
输入一行,包含一个表达式。
输出格式
输出这个表达式的值。
样例输入
1-2+3*(4-5)
样例输出
-4
数据规模和约定
表达式长度不超过100,表达式运算合法且运算过程都在int内进行。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <stack>
using namespace std;int bijiao(char x){switch(x){case '+': return 1;case '-': return 1;case '*': return 2;case '/': return 2;case '(': return -1;case '#': return 0;}return 0;
}int f(string str){int ans = 0;stack <char> cst;stack <int> ist;str += '#';cst.push('#');int i = 0, len = str.length();while(i < len){if(str[i] >= '0' && str[i] <= '9'){int sum = 0;while(str[i] >= '0' && str[i] <= '9'){sum = sum * 10 + (str[i] - '0');i++;}if(cst.top() == '-'){  //将减号换为加一个负数 cst.pop();cst.push('+');sum = -sum;}ist.push(sum);}if(str[i] == '('){cst.push(str[i]);i++;}else if(str[i] == ')'){while(cst.top() != '('){ //一直碰到左括号结束 char ch;ch = cst.top();cst.pop();int a = ist.top();ist.pop();int b = ist.top();ist.pop();int x = 0;if(ch == '+'){x = b + a;}else if(ch == '-'){x = b - a;}else if(ch == '*'){x = b * a;}else if(ch == '/'){x = b / a;}ist.push(x);
//              i++;}cst.pop();i++;}else if(bijiao(str[i]) >= bijiao(cst.top())){ //优先级高的直接入栈 cst.push(str[i]);i++;}else if(bijiao(str[i]) < bijiao(cst.top())){while(bijiao(str[i]) < bijiao(cst.top())){ //直到当前的符号优先级比栈顶优先级高,才入栈,否则一直运算 char ch;ch = cst.top();cst.pop();int a = ist.top();ist.pop();int b = ist.top();ist.pop();int x = 0;if(ch == '+'){x = b + a;}else if(ch == '-'){x = b - a;}else if(ch == '*'){x = b * a;}else if(ch == '/'){x = b / a;}ist.push(x);}cst.push(str[i]);i++;}}return ist.top();
}int main(){string str;cin >> str;cout << f(str) << endl;return 0;
}

  

转载于:https://www.cnblogs.com/zhumengdexiaobai/p/8456004.html

51-表达式计算(带括号的)相关推荐

  1. 中缀转后缀表达式,带括号的后缀表达式综合计算器,Java栈数据结构实现

    文章目录 中缀表达式转后缀表达式思路 逆波兰表达式计算思路 代码实现 中缀表达式转后缀表达式思路 1.初始化两个栈:运算符栈s1和储存中间结果的栈s2 2.从左至右扫描中缀表达式 3.遇到操作数时,将 ...

  2. oc 计算 带括号 式子

    下面代码实现可以计算 类似以下的字符窜. @"(1+2*(3+4)+3)/2" 自写一个简单 stack .不知道 OC为什么不提供Stack类. #import <Foun ...

  3. 表达式求值:从“加减”到“带括号的加减乘除”的实践过程

    本文乃Siliphen原创,转载请注明出处:http://blog.csdn.NET/stevenkylelee ● 为什么想做一个表达式求值的程序 最近有一个需求,策划想设置游戏关卡的某些数值,这个 ...

  4. 【软工Work1】四则加减乘除混合运算(带括号、真分数)

    大家好,很高兴写一片博客给分享自己的这段奇妙的experience of coding! 本来想听老师建议在github上down一些代码的,但之后看网上代码都挺复杂怕难改.而且自己更简单的自己的思路 ...

  5. 模拟表达式运算(加减乘除,负数,带括号)

    模拟表达式运算(加减乘除,负数,带括号) 要模拟表达式运算需要目标不同表达式之间的转换关系. 可以参考我的另一篇文章(中后缀表达式转换) 由于水平问题(自己写的总有bug,而且又长又繁琐),所以参考代 ...

  6. [算法 笔记]字符串表达式计算(简易版)

    题目:编写一个函数,计算字符串中表达式的值,参数中只包含计算符:+,-,*,/等.例如,str="10+50+2*6/3",result=64. 解析: 考虑算术表达式计算规则: ...

  7. 带括号的简单四则计算器(思路)

    二更,理完思路后自己用Java写了个最简单的计算器 https://blog.csdn.net/weixin_42324771/article/details/90144707 以下是原文 网上有很多 ...

  8. 【程序】[Qt\C++] 图形化计算器——用QT5实现带括号优先级的GUI编程计算器

    一. 实验任务(实验题目.目的) 搞个图形化的代括号的计算器 二. 任务分析 假设已经有了计算器,实现按下等号的计算算法 学习qt 设置各按钮槽函数 将算法缝合进qt内 设计实现负数.小数 优化代码计 ...

  9. 十以内带括号的加减法(c++)

    这是数据结构老师在课上讲的例题,具体教程可以看我上传的ppt,问题要求如下: 输入一串字符串,为十以内带括号的加减乘除,输出后缀表达式和结果. 解决思路: 先将字符串转化为后缀表达式,然后利用后缀表达 ...

最新文章

  1. SQL Server 运行计划操作符具体解释(2)——串联(Concatenation )
  2. 华为的鸿蒙系统可以装在电脑上吗_继鸿蒙系统后!华为首款台式机电脑上线:联想PC霸主地位危险了...
  3. DeepMatching文献总结:图像拼接、图像匹配、图像检索
  4. CVPR 2020 《12-in-1: Multi-Task Vision and Language Representation Learning》论文笔记
  5. Bugly符号化iOS 崩溃,快速定位crash(上传符号表)
  6. C语言九十七之实现有 1、2、3、4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?并且输出多少个
  7. Mac MySQLdb模块安装,可算解决了
  8. MapReduce 作业调试
  9. oracle序列的描述,Oracle同义词和序列的基本使用方法
  10. Struts框架命名空间问题答疑
  11. sqlserver卸载不完全导致安装失败
  12. 工程项目管理系统源码
  13. 鸟哥的linux私房菜学习笔记7
  14. 文档词频矩阵_对论文“从词向量到文档距离”的理解
  15. 数据结构算法---八大排序
  16. git merge 单个文件
  17. python生成基础头像_python个性化头像
  18. 【docker】出现segmentation fault,如何导出转储
  19. 计算机考试去底纹,2017职称计算机考试Word 2003知识点:段落添加边框和底纹
  20. 数据库的基本概念-基础(课堂笔记)

热门文章

  1. 2021年退休工资会不会涨?
  2. DOCX是什么格式文件
  3. 下岗职工能不能提前退休?怎样才能提前退休?
  4. 一个人开长途车旅游安全吗?
  5. 电子科技大学要多少分才能录取?
  6. 商业认知,近期与部分中小创业者一起吃饭,忽然有人谈到现在创业越来越难
  7. 判断力有时候有多么重要?懂得选择多么重要?
  8. 人不能活在舒适区里,我要趁年轻出去闯闯
  9. OSI参考模型(应用层、表示层、会话层、传输层、网络层、数据链路层、物理层)...
  10. JavaScript中的流程控制语句