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 ...
随机推荐
- Java算法练习——正则表达式匹配
题目链接 题目描述 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符 '*' 匹配零个或多个前面的那一个元素 所谓匹配,是要 ...
- 当DIV内出现滚动条,fixed实效怎么办?
sticky 盒位置根据正常流计算(这称为正常流动中的位置),然后相对于该元素在流中的 flow root(BFC)和 containing block(最近的块级祖先元素)定位.在所有情况下( ...
- html 鼠标样式 鼠标悬停 小手样式
在style中添加cursor:pointer 实现鼠标悬停变成小手样式 先来一个示例 <div style="float:right"> <a class=&q ...
- C语言编程实现SYN-Flood(Dos)攻击
## 实验环境为了方便,直接在win10 VS2013Ultimate实现(攻击机),靶机为同一局域网的另外一台主机或外网服务器. ## 实验依赖基于WinPcap实现,需要安装WinPcap4. ...
- 2020/1/30 PHP代码审计之文件上传漏洞
0x00 漏洞简介 文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力.这种攻击是最为直接和有效的,"文件上传"本身是没有问题,有问题的是 ...
- jQuery选择器全解析
1. 基本选择器 1.1 id选择器:$(#id) <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ...
- UVA - 10934 Dropping water balloons(装满水的气球)(dp)
题意:有k个气球,n层楼,求出至少需要多少次实验能确定气球的硬度.气球不会被实验所“磨损”. 分析: 1.dp[i][j]表示第i个气球,测试j次所能确定的最高楼层. 2.假设第i-1个气球测试j-1 ...
- 网格视图GridView
1.常用属性 2.Adapter接口 3.Demo演示 今天观看了GridView的相关视频,并且根据案例,进行了代码的编写和实例 新建GridViewActivity.java继承AppCompat ...
- python里类的概念
Python编程中类的概念可以比作是某种类型集合的描述,如"人类"可以被看作一个类,然后用人类这个类定义出每个具体的人--你.我.他等作为其对象.类还拥有属性和功能,属性即类本身的 ...
- django_filter的values / values_list
from django.db import models class Blog(models.Model): name = models.CharField(max_length=100) tagli ...