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

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

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

#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. 解决RecyclerView瀑布流效果结合Glide使用时图片变形的问题

    问题描述:使用Glide加载RecyclerView的Item中的图片,RecyclerView使用了瀑布流展示图片,但是滚动时图片会不断的加载,并且大小位置都会改变,造成显示错乱. 解决方法:使用瀑 ...

  2. Java算法练习——整数转罗马数字

    题目链接 题目描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 ...

  3. Relu激活函数的优点

    Relu优点: 1.可以使网络训练更快. 相比于sigmoid.tanh,导数更加好求,反向传播就是不断的更新参数的过程,因为其导数不复杂形式简单. 2.增加网络的非线性. 本身为非线性函数,加入到神 ...

  4. css 网格线

    白色网格线 background: #58a; background-image: linear-gradient(rgba(255,255,255,.3) 1px, transparent 0), ...

  5. PAT 2019 秋

    考试的还行.不过略微有点遗憾,但是没想到第一题会直接上排序和dfs,感觉这次的题目难度好像是倒着的一样.哈哈哈哈. 第一题实在是搞崩心态,这道题给我的感觉是,可以做,但事实上总是差点啥. 第二题,第三 ...

  6. 读书笔记 - js高级程序设计 - 第六章 面向对象的程序设计

      EcmaScript有两种属性 数据属性 和 访问器属性 数据属性有4个特性 Configurable Enumerable Writable Value   前三个值的默认值都为false   ...

  7. 洛谷 P2719 搞笑世界杯

    题目传送门 解题思路: f[i][j]表示买i张A票,j张B票的概率. AC代码: #include<iostream> #include<cstdio> using name ...

  8. ABP JTable如何显示序列号

    显示序列号 recordsLoaded: function (event, data) { var SrNo = 0; if (data.records) { $.each(data.records, ...

  9. leetcode--200--python(深度广度优先遍历实现代码)

    点滴积累,厚积薄发,做好每一天,向时间要效率,向生命要质量. 一.深度优先搜索和广度优先搜索DFS(Depth-First-Search),是盲目搜索算法的一种.常常用在树的遍历及图的处理上.假设当前 ...

  10. css选择器,选择指定属性的值

    选择属性为href的值: <a class='test' href='www.baidu.com' >test</a> response.css('.test::attr(hr ...