#include <bits/stdc++.h>using namespace std;
//此方法与视频中的方法不太一致,不是先转化成后缀表达式后再计算
//而是边转换边计算
//先转换再计算缺点:会导致储存后缀表达式的stack内部数字无法辨别是符号还是计算出的结果
//需要另外设计
stack<int> res;
stack<char> sign;
int table[130]={0};//优先级void init(int table[])
{table['-']=1;table['+']=1;table['*']=2;table['/']=2;table['(']=0;table[')']=0;
}
//这里要注意是&
void cal(stack<int> &res, char sign)
{int tmp2 = res.top();res.pop();int tmp1 = res.top();res.pop();if(sign=='-') res.push(tmp1-tmp2);if(sign=='+') res.push(tmp1+tmp2);if(sign=='*') res.push(tmp1*tmp2);if(sign=='/') res.push(tmp1/tmp2);
}int main()
{init(table);string s;cin>>s;int len=s.size();int i=0;//因为循环中涉及到i的++,所以不用forwhile(i<len){if(isdigit(s[i])){int tmp=0;while(i<len &&isdigit(s[i])){tmp = tmp*10+s[i]-'0';i++;}res.push(tmp);}else{if(s[i]=='-'){if(i==0 ||s[i-1]=='('){int tmp=0;i++;while(i<len &&isdigit(s[i])){tmp = tmp*10+s[i]-'0';i++;}res.push(-1*tmp);}else{while(!sign.empty() &&table[s[i]]<=table[sign.top()]){cal(res, sign.top());sign.pop();}sign.push(s[i]);i++;}}else{if(s[i]=='(') sign.push('(');else if(s[i]==')'){while(sign.top()!='('){cal(res, sign.top());sign.pop();}sign.pop();}else{while(!sign.empty() &&table[s[i]]<=table[sign.top()]){cal(res, sign.top());sign.pop();}sign.push(s[i]);}i++;}}}while(!sign.empty()){cal(res, sign.top());sign.pop();}cout<<res.top()<<endl;return 0;
}

EOJ_1024_表达式相关推荐

  1. Go 学习笔记(77)— Go 第三方库之 cronexpr(解析 crontab 表达式,定时任务)

    cronexpr 支持的比 Linux 自身的 crontab 更详细,可以精确到秒级别. ​ 1. 实现方式 cronexpr 表达式从前到后的顺序如下所示: 字段类型 是否为必须字段 允许的值 允 ...

  2. Go 学习笔记(62)— Go 中 switch 语句中的 switch 表达式和 case 表达式之间的关系

    switch 语句对 switch 表达式的结果类型,以及各个 case 表达式中子表达式的结果类型都是有要求的. 毕竟,在 Go 语言中,只有类型相同的值之间才有可能被允许进行判等操作. 1. sw ...

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

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

  4. 使用Tensor Expression张量表达式处理算子

    使用Tensor Expression张量表达式处理算子 这是TVM中Tensor表达语言的入门教程.TVM使用特定于域的张量表达式来进行有效的内核构造. 本文将演示使用张量表达式语言的基本工作流程. ...

  5. Lambda 表达式基础理论与示例

    Lambda 表达式基础理论与示例 Lambda 表达式,也可称为闭包,推动 Java 8 发布的最重要新特性. Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中). 使用 Lam ...

  6. CodeGen编写自定义表达式标记

    CodeGen编写自定义表达式标记 CodeGen支持开发人员通过编写plug-in modules插件模块来定义自定义表达式标记的能力,以提供与这些标记相关联的逻辑.这种plug-in module ...

  7. 2021年大数据常用语言Scala(七):基础语法学习 条件表达式

    条件表达式 条件表达式就是if表达式,if表达式可以根据给定的条件是否满足,根据条件的结果(真或假)决定执行对应的操作.scala条件表达式的语法和Java一样. 有返回值的if 与Java不一样的是 ...

  8. [JAVAEE] Thymeleaf 基本语法:常用表达式

    Thymeleaf 基本语法 常用表达式 变量表达式 ${ } 使用方法:th:xx = "${ }" 获取对象属性值给 th:xx . 后台代码: Student s=new S ...

  9. 零起点学算法07——复杂一点的表达式计算

    零起点学算法07--复杂一点的表达式计算 Description 下面你来计算一个复杂一点的计算表达式 Input 没有输入 Output 输出表达式的值,保留2位小数 题目分析:根号要用sqrt来算 ...

最新文章

  1. Python sort()和sorted()函数区别及用法详解
  2. PAT-BASIC-1039-到底买不买
  3. 使用Apache CXF开发SOAP Web服务
  4. 01-Eureka是什么?
  5. CentOS查看硬件信息
  6. Golang 性能分析工具简要介绍
  7. J2ME 手机模拟器插件 eclipseme.feature_1.7.9_site.zip
  8. Intouch通过ODBC连接MySQL
  9. linux安装Hive(Hive-2.3.7)
  10. [Rscript]探索性因子分析
  11. 有话费但是上网显示无法连接服务器失败,【10元话费,5GB流量】宽带故障不要怕,教你一招来解决!...
  12. OpenGL-坐标系统,进入3D世界(深度测试)
  13. ADS-B及雷达显示终端8.2
  14. C++ enum前置声明
  15. ubuntu从零到一跑通ORB_SLAM2及其ORBSLAM2_with_pointcloud稠密建图
  16. lua和go混合调用调试记录支持跨平台(通过C和LuaJit进行实现)
  17. Poi 导出excel多个sheet的内容
  18. java实验三_JAVA实验三及总结
  19. ECCV 2020 oral | CondInst:沈春华团队新作,将条件卷积引入实例分割
  20. 手机号如何批量导入通讯录?

热门文章

  1. ConcurrentHashMap的源码分析-resizeStamp
  2. stateOffset
  3. 为什么需要ORM 框架
  4. TCP/IP协议的SYN攻击
  5. 基于Redis优化购物车 - 添加商品
  6. weblogic获取文件的路径问题
  7. Executor家族的辨析
  8. 常用的函数式接口_Function接口练习_自定义函数模型拼接
  9. Stream流中的常用方法_limit
  10. 适配器模式源码解析(jdk+spring+springjpa+springmvc)