后缀式求值

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

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    ·如果后缀表达式未读完,就重复上面过程,最后输出栈顶的数值则为结束 */

你可能感兴趣的:(后缀式求值)