后缀表达式
来源:互联网 发布:查找excel两表相同数据 编辑:程序博客网 时间:2024/05/21 11:58
开两个栈,一个存符号,另一个存数字;
存符号的栈保证优先级递增(相等也不行);
否则,10-3+7,答案会是0,(7+3-10);
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;typedef long long ll;const ll MAXN=210;ll stack[MAXN],a[MAXN];char stack_f[MAXN],s[MAXN],b[MAXN];ll len,top,top_f,x,y,tot;ll get(char c)//得到优先级;{ switch(c) { case '(': return 0; case '+': return 1; case '-': return 1; case '*': return 2; case '/': return 2; case '^': return 2147483647; }}ll ji(ll x,ll y,char c){ switch(c)//计算; { case '+': return x+y; case '-': return x-y; case '*': return x*y; case '/': return x/y; case '^': return pow(x,y); }}void done(){ while(stack_f[top_f]!='(') { x=stack[top],--top; y=stack[top],--top; tot=ji(y,x,stack_f[top_f]); top_f--; stack[++top]=tot; } if(stack_f[top_f]=='(') top_f--; return;}void calc(char c){ if(c==')') { done(); return; } else if(c=='(' || !top_f || get(stack_f[top_f])<get(c)) { stack_f[++top_f]=c; return; } else if(get(stack_f[top_f])>=get(c)) {//如果优先级无法递增,那么将前面的计算完,直到为空或者栈顶符号优先级小于当前符号; while(get(stack_f[top_f])>=get(c) && top_f) { x=stack[top],top--; y=stack[top],top--; tot=ji(y,x,stack_f[top_f]); top_f--; stack[++top]=tot; } stack_f[++top_f]=c; } return;}void solve(){ scanf("%s",s+1); len=strlen(s+1); for(ll i=1;i<=len;) { ll f=1; if((s[i]=='-' && s[i-1]=='\0') || (s[i]=='-' && s[i-1]=='(')) f=-1,i++;//特判负数; if(s[i]>='0' && s[i]<='9') { ll num=0; while(s[i]>='0' && s[i]<='9') num=num*10+s[i]-'0',i++; stack[++top]=num*f; } else calc(s[i]),i++; } while(stack_f[top_f]=='(') top_f--; while(top>=2) { x=stack[top],top--; y=stack[top],top--; tot=ji(y,x,stack_f[top_f]); top_f--; stack[++top]=tot; } cout<<stack[top]<<'\n'; return;}int main(){ solve(); return 0;}
阅读全文
2 0
- 后缀表达式
- 后缀表达式
- 后缀表达式
- 后缀表达式
- 后缀表达式
- 后缀表达式
- 【后缀表达式】
- 后缀表达式
- 后缀表达式
- 后缀表达式
- 后缀表达式
- 后缀表达式
- 后缀表达式
- 后缀表达式
- 后缀表达式
- 后缀表达式
- 后缀表达式
- 后缀表达式
- C++中virtual相关的知识
- 面试题3:数组中重复的数字
- Python进阶之MySQL数据库在linux中中文的插入和显示问题
- angularjs实现
- 进程间的通信--(四)消息队列
- 后缀表达式
- Java基础练习-输入的年份、产品类型和随机数产生固定资产编号
- 视觉slam14讲——习题部分
- hdu 4416 后缀自动机 问在S中有多少个不同子串满足它不是s1~sn中任意一个字符串的子串
- 洛谷 p1970
- 远程调用webservice接口的实现方法
- 第五周 项目1
- ccf 201703-3 Markdown
- PAT --- 1002. A+B for Polynomials (25)