数据结构实验之栈与队列三:后缀式求值
Time Limit: 1000 ms Memory Limit: 65536 KiB
Problem Description
对于一个基于二元运算符的后缀表示式(基本操作数都是一位正整数),求其代表的算术表达式的值。
Input
输入一个算术表达式的后缀式字符串,以‘#’作为结束标志。
Output
求该后缀式所对应的算术表达式的值,并输出之。
Sample Input
59*684/-3*+#
Sample Output
57
提示:本题熟悉了栈的原理即可做出,反向应用算术表达式转化后缀式。
代码表示如下(g++):
#include<bits/stdc++.h> using namespace std; int main() { stack<int>t; int d,i; char a[1010]; scanf("%s",a); for(i=0;a[i]!='#';i++) { if(a[i]=='+'||a[i]=='-'||a[i]=='*'||a[i]=='/') { if(a[i]=='+') { d=t.top(); t.pop(); d=t.top()+d; t.pop(); t.push(d); } else if(a[i]=='-') { d=t.top(); t.pop(); d=t.top()-d; t.pop(); t.push(d); } else if(a[i]=='*') { d=t.top(); t.pop(); d=t.top()*d; t.pop(); t.push(d); } else if(a[i]=='/') { d=t.top(); t.pop(); d=t.top()/d; t.pop(); t.push(d); } } else t.push(a[i]-'0'); } printf("%d",t.top()); return 0; } /*************************************************** Result: Accepted Take time: 0ms Take Memory: 156KB ****************************************************/