栈运用的模板题,对于符号进行出入栈操作,每次与栈顶的符号进行优先级判断,得出第一行后缀表达式。

在其后的化简计算中,每次用一个特殊符号(代码中使用了'?')代替原来的计算结果引用,并开一个数组表示每次的计算结果,之后搜索到'?'时用这个结果进行代入计算。

直到只剩下一个数字,停止程序。

#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 - 表达式的转换——中级的更多相关文章

  1. .Net 中表达式的转换

    .Net 中表达式的转换 如: a>0  && (c>a || a <b ) || (a>b || c>1)    转换后  (((a > 0) a ...

  2. swust oj(0088)表达式的转换

    表达式的转换(0088) Time limit(ms): 5000 Memory limit(kb): 65535 Submission: 435 Accepted: 93 Accepted 16级卓 ...

  3. Python与数据结构[1] -> 栈/Stack[1] -> 中缀表达式与后缀表达式的转换和计算

    中缀表达式与后缀表达式的转换和计算 目录 中缀表达式转换为后缀表达式 后缀表达式的计算 1 中缀表达式转换为后缀表达式 中缀表达式转换为后缀表达式的实现方式为: 依次获取中缀表达式的元素, 若元素为操 ...

  4. 洛谷P1175 表达式的转换

    P1175 表达式的转换 44通过 147提交 题目提供者该用户不存在 标签云端 难度提高+/省选- 时空限制1s / 128MB 提交  讨论  题解 最新讨论更多讨论 这题有毒 抄题解棒责五十! ...

  5. LINQ查询表达式详解(2)——查询表达式的转换

    简介 C#在执行LINQ查询表达式的时候,并不会指定其执行语义,而是将查询表达式转换为遵循查询表达式模式的方法的调用.具体而言,查询表达式将转换为以下名称的调用:Where.Select.Select ...

  6. 中后缀表达式/洛谷P1175 表达式的转换

    P1175 表达式的转换 思路:先用栈转成中缀表达式,再用栈进行计算.要输出过程,因此计算一次输出一次,但是栈没有迭代器,不好用,换成vector(可以pop_back).虽然表达式求值也可以这么做, ...

  7. SDUT2484算术表达式的转换

    http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2484&cid=1182 题目描述 小明在学习了数据结构之后,突然想起了以前没有解决的算术 ...

  8. SDUT2484 算术表达式的转换(表达式树)

    题目链接. 分析: 转换成表达式树,然后先序.中序.后序遍历. AC代码如下: #include <stdio.h> #include <string.h> #define m ...

  9. 洛谷【P1175】表达式的转换

    浅谈栈:https://www.cnblogs.com/AKMer/p/10278222.html 题目传送门:https://www.luogu.org/problemnew/show/P1175 ...

随机推荐

  1. java菜鸡循环练习

    While 循环练习  输入3次密码,则打印密码锁定 package com.lv.test; import java.util.Scanner; public class DemoPass { pu ...

  2. 7 ~ express ~ body-parser 模块的使用

    一,安装 : npm install body-parser 二,加载 : var bodyParser = require('body-parser') 三,配置 : https://github. ...

  3. LabVIEW面向对象的ActorFramework(3)

    四.LabVIEW面向对象的编程架构:Actor Framework Actor Framework是一个软件类库,用以支持编写有多个VI独立运行且相互间可通信的应用程序,在该类型应用程序中,每个VI ...

  4. JAVAEE 和项目开发(第三课:HTTP的请求头和请求方式)

    HTTP 协议之请求格式   请求格式的结构:请求行:请求方式.请求的地址和 HTTP 协议版本 请求头:消息报头,一般用来说明客户端要使用的一些附加信息 空行: 位于请求行和请求数据之间,空行是必须 ...

  5. 六、SAP中以一个变量的形式来定义另一种变量

    一.代码如下: 二.输出

  6. OC项目加入swift第三方库遇到的坑

    https://www.jianshu.com/p/96d868dcd69c 2017.07.07 16:23* 字数 295 阅读 5218评论 2喜欢 4 首先,在OC项目的Podfile文件中添 ...

  7. hiho1482出勤记录II(string类字符串中查找字符串,库函数的应用)

    string类中有很多好用的函数,这里介绍在string类字符串中查找字符串的函数. string类字符串中查找字符串一般可以用: 1.s.find(s1)函数,从前往后查找与目标字符串匹配的第一个位 ...

  8. Postgres psql: 致命错误: 角色 "postgres" 不存在

    问题再现 当前环境: postgresql: 11.5 windows 10 企业版LTSC 64位 当运行"C:\Program Files\PostgreSQL\11\scripts\r ...

  9. [BJDCTF2020]Mark loves cat

    0x00 知识点 GitHack读取源码 $$会导致变量覆盖漏洞 0x01解题 dirsearch扫描一下,发现/.git目录,用githack获取一下源码. <?php include 'fl ...

  10. [XNUCA2019Qualifier]EasyPHP

    0x00 知识点 预期解中知识点: htaccess生效 如果尝试上传htaccess文件会发现出现响应500的问题,因为文件尾有Just one chance 这里采用# \的方式将换行符转义成普通 ...