EOJ_1024_表达式
#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_表达式相关推荐
- Go 学习笔记(77)— Go 第三方库之 cronexpr(解析 crontab 表达式,定时任务)
cronexpr 支持的比 Linux 自身的 crontab 更详细,可以精确到秒级别. 1. 实现方式 cronexpr 表达式从前到后的顺序如下所示: 字段类型 是否为必须字段 允许的值 允 ...
- Go 学习笔记(62)— Go 中 switch 语句中的 switch 表达式和 case 表达式之间的关系
switch 语句对 switch 表达式的结果类型,以及各个 case 表达式中子表达式的结果类型都是有要求的. 毕竟,在 Go 语言中,只有类型相同的值之间才有可能被允许进行判等操作. 1. sw ...
- 经典笔试上机考题-表达式求值
相信参加过笔试面试同学应当见到过表达式求值这道题,下面列举的一道经典的考题,本文将同大家一起细细探讨一下表达式求值这一类问题的求法,希望抛砖引玉,其中有不妥的地方也请大家多多批评指正. /* 功能:四 ...
- 使用Tensor Expression张量表达式处理算子
使用Tensor Expression张量表达式处理算子 这是TVM中Tensor表达语言的入门教程.TVM使用特定于域的张量表达式来进行有效的内核构造. 本文将演示使用张量表达式语言的基本工作流程. ...
- Lambda 表达式基础理论与示例
Lambda 表达式基础理论与示例 Lambda 表达式,也可称为闭包,推动 Java 8 发布的最重要新特性. Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中). 使用 Lam ...
- CodeGen编写自定义表达式标记
CodeGen编写自定义表达式标记 CodeGen支持开发人员通过编写plug-in modules插件模块来定义自定义表达式标记的能力,以提供与这些标记相关联的逻辑.这种plug-in module ...
- 2021年大数据常用语言Scala(七):基础语法学习 条件表达式
条件表达式 条件表达式就是if表达式,if表达式可以根据给定的条件是否满足,根据条件的结果(真或假)决定执行对应的操作.scala条件表达式的语法和Java一样. 有返回值的if 与Java不一样的是 ...
- [JAVAEE] Thymeleaf 基本语法:常用表达式
Thymeleaf 基本语法 常用表达式 变量表达式 ${ } 使用方法:th:xx = "${ }" 获取对象属性值给 th:xx . 后台代码: Student s=new S ...
- 零起点学算法07——复杂一点的表达式计算
零起点学算法07--复杂一点的表达式计算 Description 下面你来计算一个复杂一点的计算表达式 Input 没有输入 Output 输出表达式的值,保留2位小数 题目分析:根号要用sqrt来算 ...
最新文章
- Python sort()和sorted()函数区别及用法详解
- PAT-BASIC-1039-到底买不买
- 使用Apache CXF开发SOAP Web服务
- 01-Eureka是什么?
- CentOS查看硬件信息
- Golang 性能分析工具简要介绍
- J2ME 手机模拟器插件 eclipseme.feature_1.7.9_site.zip
- Intouch通过ODBC连接MySQL
- linux安装Hive(Hive-2.3.7)
- [Rscript]探索性因子分析
- 有话费但是上网显示无法连接服务器失败,【10元话费,5GB流量】宽带故障不要怕,教你一招来解决!...
- OpenGL-坐标系统,进入3D世界(深度测试)
- ADS-B及雷达显示终端8.2
- C++ enum前置声明
- ubuntu从零到一跑通ORB_SLAM2及其ORBSLAM2_with_pointcloud稠密建图
- lua和go混合调用调试记录支持跨平台(通过C和LuaJit进行实现)
- Poi 导出excel多个sheet的内容
- java实验三_JAVA实验三及总结
- ECCV 2020 oral | CondInst:沈春华团队新作,将条件卷积引入实例分割
- 手机号如何批量导入通讯录?