ACW3302. 表达式求值(leetcode内会员题)

给定一个表达式,其中运算符仅包含 +,-,*,/(加 减 乘 整除),可能包含括号,请你求出表达式的最终值。

注意:

数据保证给定的表达式合法。
题目保证符号 - 只作为减号出现,不会作为负号出现,例如,-1+2,(2+2)*(-(1+1)+2) 之类表达式均不会出现。
题目保证表达式中所有数字均为正整数。
题目保证表达式在中间计算过程以及结果中,均不超过 231−1。
题目中的整除是指向 0 取整,也就是说对于大于 0 的结果向下取整,例如 5/3=1,对于小于 0 的结果向上取整,例如 5/(1−4)=−1。
C++和Java中的整除默认是向零取整;Python中的整除//默认向下取整,因此Python的eval()函数中的整除也是向下取整,在本题中不能直接使用。
输入格式
共一行,为给定表达式。

输出格式
共一行,为表达式的结果。

数据范围
表达式的长度不超过 105。

输入样例:
(2+2)*(1+1)
输出样例:
8

#include <iostream>
#include <stack>
#include <string>
#include <unordered_map>
using namespace std;stack<int> num;
stack<char> op;//优先级表
unordered_map<char, int> h{ {'+', 1}, {'-', 1}, {'*',2}, {'/', 2} };void eval()//求值
{int a = num.top();//第二个操作数num.pop();int b = num.top();//第一个操作数num.pop();char p = op.top();//运算符op.pop();int r = 0;//结果 //计算结果if (p == '+') r = b + a;if (p == '-') r = b - a;if (p == '*') r = b * a;if (p == '/') r = b / a;num.push(r);//结果入栈
}int main()
{string s;cin >> s;for (int i = 0; i < s.size(); i++){if (isdigit(s[i])){int x = 0, j = i;while (j < s.size() && isdigit(s[j])){x = x * 10 + s[j] - '0';j++;}num.push(x);//数字入栈i = j - 1;}else if (s[i] == '(')//左括号入栈{op.push(s[i]);}//括号特殊,遇到左括号直接入栈,遇到右括号计算括号里面的else if (s[i] == ')')//右括号{while(op.top() != '(')//一直计算到左括号eval();op.pop();//左括号出栈}else{while (op.size() && h[op.top()] >= h[s[i]])//待入栈运算符优先级低,则先计算,必须<=eval();op.push(s[i]);//操作符入栈}}while (op.size()) eval();//剩余op栈内的进行计算cout << num.top() << endl;/return 0;
}

ACW3302表达式求值相关推荐

  1. 经典笔试上机考题-表达式求值

    相信参加过笔试面试同学应当见到过表达式求值这道题,下面列举的一道经典的考题,本文将同大家一起细细探讨一下表达式求值这一类问题的求法,希望抛砖引玉,其中有不妥的地方也请大家多多批评指正. /* 功能:四 ...

  2. NOIP2013普及组 T2 表达式求值

    OJ地址:洛谷P1981 CODEVS 3292 正常写法是用栈 1 #include<iostream> 2 #include<algorithm> 3 #include&l ...

  3. 栈 -- 顺序栈、链式栈的实现 及其应用(函数栈,表达式求值,括号匹配)

    文章目录 实现 顺序栈实现 链式栈实现 应用 函数栈 的应用 表达式求值中 的应用 括号匹配中 的应用 我们使用浏览器的时候经常会用到前进.后退功能. 依次访问完一串页面 a – b – c之后点击后 ...

  4. 【Java】LeetCode 150. 逆波兰表达式求值 (后缀表达式)

    题目: 根据 逆波兰表示法,求表达式的值. 有效的算符包括 +.-.*./ .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 说明: 整数除法只保留整数部分. 给定逆波兰表达式总是有效的.换句话 ...

  5. C语言----表达式求值之隐式类型转换

    前言: 表达式求值的顺序一部分是由操作符的优先级和结合性决定. 同样,有些表达式的操作数在求值的过程中可能需要转换为其他类型,称为隐式类型转换,下面给出隐式类型转换的详细讲解,希望对大家有所帮助~ 隐 ...

  6. [数据结构]表达式求值

    一.问题描述 表达式求值是数学中的一个基本问题,也是程序设计中的一个简单问题.我们所涉及的表达式中包含数字和符号,本实验中处理的符号包括'+'.'-'.'*'.'/'.'('和')',要求按照我们所习 ...

  7. c语言作业算术表达式求值,算术表达式求值演示(C语言版)

    //头文件预处理命令 #include #include //----------函数结果状态代码----------------- #define TRUE 1 #define FALSE 0 #d ...

  8. 严蔚敏《数据结构》C语言版 第三章 算法3.4 表达式求值

    这个我是看到华为今年招聘的机试题的第三题. 输入一串算术表达式的字符串,把它的结果算出来. 1 //表达式求值(输入.输出和中间结果均只能是0-9)运算符仅限+-*/. 2 #include < ...

  9. 函数嵌套 lisp表达式求值

    问题 D: lisp表达式求值 时间限制: 1 Sec  内存限制: 128 MB 提交: 105  解决: 43 [提交][状态][讨论版] 题目描述 lisp是一种非常古老的计算机语言,是由约翰· ...

最新文章

  1. Django博客系统(发表评论)
  2. java计算时间差 Java问题通用解决代码
  3. 时间 '2018-08-06T10:00:00.000Z' 格式转化为本地时间(转)
  4. Linux uname 命令 打印系统信息
  5. 什么是PV UV PR值
  6. HDU2032 杨辉三角【入门+趣味程序】
  7. Linux安装后无法进入图形界面(GNOME,KDE等)的解决方法
  8. 《电路分析导论(原书第12版)》一3.6 色环与标准电阻标称值
  9. windows7系统下使DOS窗口最大化(全屏)
  10. 微信小程序播放器实战开发教程
  11. 华南师范大学计算机学院保研,保研学霸专访
  12. 打光篇-Radiometric Photometric概念
  13. 跟我一起学-Python爬取(酷我)
  14. 第7章 项目成本管理
  15. 2022年蓝桥杯省赛真题解析(C++B组)
  16. 看雪安全接入KSA开放内测
  17. pygame实现雷电游戏雏形开发
  18. python raise和except区别_Python3 try-except、raise和assert解析
  19. PC网站接入微信登陆流程三:前端获取展示登录二维码,并且登录成功后提交code给后端
  20. 腾讯地图实现点击搜索地址功能

热门文章

  1. Date日期——格式化日期时分秒
  2. 【语音识别】基于MFCC的小波变换DTW实现说话人识别matlab代码
  3. PDF文件太大怎么压缩,方法其实很简单
  4. 校园宿舍安全如何保障?这个技能太厉害了
  5. STO要取代ICO?中国监管叫停,出海人才匮乏,审计成本高达250万
  6. 独立开发者接入防沉迷尽然如此简单?-TapTap 防沉迷模块Android版
  7. 20家最具创新力的创业公司
  8. 包管理工具,npm、yarn、pnpm
  9. FPGA中亚稳态、异步信号处理、建立和保持时间违例及题目合集
  10. 软件的接口设计图_软件的生命周期amp;测试基本流程