ZJNU 1069 - 表达式的转换——中级
栈运用的模板题,对于符号进行出入栈操作,每次与栈顶的符号进行优先级判断,得出第一行后缀表达式。
在其后的化简计算中,每次用一个特殊符号(代码中使用了'?')代替原来的计算结果引用,并开一个数组表示每次的计算结果,之后搜索到'?'时用这个结果进行代入计算。
直到只剩下一个数字,停止程序。
#include<iostream>
#include<cstring>
#include<cmath>
#include<stack>
using namespace std;
int rplans[];
char ans[];
bool mns[];
int lv(char c){
switch(c){
case '+':return ;
case '-':return ;
case '*':return ;
case '/':return ;
case '^':return ;
case '(':return ;
case ')':return ;
}
}
int main(){
ios::sync_with_stdio();
cin.tie();cout.tie();
stack<char> skc;
char c;
int fh=,fs=,cnt=,i,j,k,a1,a2;
while((c=getchar())!=EOF&&c!='\n'){
if(c>=''&&c<=''){
if(fs){
mns[cnt]=true;
fs=;
}
else
mns[cnt]=false;
ans[cnt++]=c;
fh=;
}
else{
if(c==')'){
while(skc.top()!='('){
ans[cnt++]=skc.top();
skc.pop();
}
skc.pop();
}
else{
if(c=='('||c=='^')
skc.push(c);
else{
if(c=='-'&&fh)
fs=;
else{
while(!skc.empty()&&lv(skc.top())>=lv(c)){
ans[cnt++]=skc.top();
skc.pop();
}
skc.push(c);
}
}
fh=;
}
}
}
while(!skc.empty()){
ans[cnt++]=skc.top();
skc.pop();
}
cout<<ans[];
for(i=;i<cnt;i++)
cout<<' '<<ans[i];
cout<<endl;
for(i=;i<(cnt-)/;i++){
for(j=;j<cnt;j++)
if(ans[j]=='+'||ans[j]=='-'||ans[j]=='*'||ans[j]=='/'||ans[j]=='^')
break;
for(k=j-;k>=;k--)
if(ans[k]>=''&&ans[k]<=''||ans[k]=='!')
break;
if(ans[k]!='!')
a1=(ans[k]-'')*(mns[k]?-:);
else
a1=rplans[k];
ans[k]='?';
for(k--;k>=;k--)
if(ans[k]>=''&&ans[k]<=''||ans[k]=='!')
break;
if(ans[k]!='!')
a2=(ans[k]-'')*(mns[k]?-:);
else
a2=rplans[k];
ans[k]='?';
if(ans[j]=='+')
rplans[j]=a2+a1;
else if(ans[j]=='-')
rplans[j]=a2-a1;
else if(ans[j]=='*')
rplans[j]=a2*a1;
else if(ans[j]=='/')
rplans[j]=a2/a1;
else
rplans[j]=pow(a2,a1);
ans[j]='!';
for(j=k=;j<cnt;j++){
if(ans[j]!='?'){
if(k)
cout<<' ';
if(ans[j]=='!')
cout<<rplans[j];
else
cout<<ans[j];
k=;
}
}
cout<<endl;
}
return ;
}
ZJNU 1069 - 表达式的转换——中级的更多相关文章
- .Net 中表达式的转换
.Net 中表达式的转换 如: a>0 && (c>a || a <b ) || (a>b || c>1) 转换后 (((a > 0) a ...
- swust oj(0088)表达式的转换
表达式的转换(0088) Time limit(ms): 5000 Memory limit(kb): 65535 Submission: 435 Accepted: 93 Accepted 16级卓 ...
- Python与数据结构[1] -> 栈/Stack[1] -> 中缀表达式与后缀表达式的转换和计算
中缀表达式与后缀表达式的转换和计算 目录 中缀表达式转换为后缀表达式 后缀表达式的计算 1 中缀表达式转换为后缀表达式 中缀表达式转换为后缀表达式的实现方式为: 依次获取中缀表达式的元素, 若元素为操 ...
- 洛谷P1175 表达式的转换
P1175 表达式的转换 44通过 147提交 题目提供者该用户不存在 标签云端 难度提高+/省选- 时空限制1s / 128MB 提交 讨论 题解 最新讨论更多讨论 这题有毒 抄题解棒责五十! ...
- LINQ查询表达式详解(2)——查询表达式的转换
简介 C#在执行LINQ查询表达式的时候,并不会指定其执行语义,而是将查询表达式转换为遵循查询表达式模式的方法的调用.具体而言,查询表达式将转换为以下名称的调用:Where.Select.Select ...
- 中后缀表达式/洛谷P1175 表达式的转换
P1175 表达式的转换 思路:先用栈转成中缀表达式,再用栈进行计算.要输出过程,因此计算一次输出一次,但是栈没有迭代器,不好用,换成vector(可以pop_back).虽然表达式求值也可以这么做, ...
- SDUT2484算术表达式的转换
http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2484&cid=1182 题目描述 小明在学习了数据结构之后,突然想起了以前没有解决的算术 ...
- SDUT2484 算术表达式的转换(表达式树)
题目链接. 分析: 转换成表达式树,然后先序.中序.后序遍历. AC代码如下: #include <stdio.h> #include <string.h> #define m ...
- 洛谷【P1175】表达式的转换
浅谈栈:https://www.cnblogs.com/AKMer/p/10278222.html 题目传送门:https://www.luogu.org/problemnew/show/P1175 ...
随机推荐
- DuplicateHandle 伪句柄 与 实句柄的应用
如果把GetCurrentThread()返回值传递给一个HANDLE句柄,用它进行ResumeThread,结果肯定不是我们想要的.下面的例子详细描述了伪句柄的调用结果: #include &quo ...
- 【pwnable.kr】passcode
pwnable从入门到放弃,第六题. ssh passcode@pwnable.kr -p2222 (pw:guest) 完全是‘&’的锅. #include <stdio.h> ...
- jq监听
$(window).resize(function () {//风电月表格自适应高度 var handHeight =$(".tree-handler").height() $(& ...
- JSP页面获取其他页面传递的参数
jstl表达式获取方式: ${param.pid} el表达式获取方式: ${requestScope.attr} el表达式获取方式: ${attr} ---------------------- ...
- css常用技巧1
css绘制三角形 <style> .triangle-box{ margin: 50px auto; height: 300px; width: 500px; box-shadow: 1p ...
- sqli-labs注入lesson1-2闯关秘籍
·lesson1 1.判断是否存在注入,并判断注入的类型 其实根据第一关提示 判断注入类型 输入下面的语句进行测试: ?id= 返回界面如下图:说明存在 字符型注入 2. 使用order by 猜测S ...
- 【MySQL基础打卡(一)】查询语句项目作业
文章目录 1.查找email表中重复的电子邮箱 1.1 创建email数据表 1.2 找出重复Email 2.查找大国家 2.1 创建数据表 2.2 查找大国家 对于安装MySQL比较恐惧,所以想在虚 ...
- SourceTree - 对Git的使用
SourceTree - 对Git的使用 一 .SourceTree简介 SourceTree 是 Windows 和Mac OS X 下免费的 Git 和 Hg 客户端,拥有可视化界面,容易上手操作 ...
- Maven - web 实例
版权所有,未经授权,禁止转载 章节 Maven – 简介 Maven – 工作原理 Maven – Repository(存储库) Maven – pom.xml 文件 Maven – 依赖管理 Ma ...
- 尝试用kotlin做一个app(二)
导航条 我想实现的效果是这样的 类似于ViewPager的效果,子类导航页面可以滑动,当滑动某个子类导航页面,导航线会平滑地向父类导航移动 ·添加布局 <!--导航分类:编程语言/技术文档/源码 ...