您的位置:首页 > 其它

后缀式求值

2015-06-16 21:41 267 查看

数据结构实验之栈三:后缀式求值


Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^

题目描述

对于一个基于二元运算符的后缀表示式(基本操作数都是一位正整数),求其代表的算术表达式的值。

输入

输入一个算术表达式的后缀式字符串,以‘#’作为结束标志。

输出

求该后缀式所对应的算术表达式的值,并输出之。

示例输入

59*684/-3*+#


示例输出

57


提示

基本操作数都是一位正整数!

来源

#include<bits/stdc++.h>

using namespace std;

string s;
int ss[100000];
int main()
{
while(cin>>s)
{
int len =s.size();
int top=0;
for(int i=0;i<len;i++)
{
if(s[i]=='#')
break;
if(s[i]>='0'&&s[i]<='9')
ss[++top]=s[i]-'0';
else if(s[i]=='*')
{
ss[top-1]*=ss[top];
top--;
}
else if(s[i]=='-')
{
ss[top-1]-=ss[top];
top--;
}
else if(s[i]=='/')
{
ss[top-1]/=ss[top];
top--;
}
else if(s[i]=='+')
{
ss[top-1]+=ss[top];
top--;
}
}
cout<<ss[top]<<endl;;
}
}


/*运用后缀表达式进行计算的具体做法:

1 ·建立一个栈S

2 ·从左到右读后缀表达式,读到数字就将它转换为数值压入栈S中,读到运算符则从栈中依次弹出两个数分别到Y和X,然后以“X 运算符 Y”的形式计算机出结果,再压加栈S中

3 ·如果后缀表达式未读完,就重复上面过程,最后输出栈顶的数值则为结束
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: