栈洛谷P1449 后缀表达式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了栈洛谷P1449 后缀表达式相关的知识,希望对你有一定的参考价值。

技术分享
    #include <iostream>
    #include <stack>
    using namespace std;
    int main(){
        stack<int>s;
        char t;
        while(cin>>t && t != @){   //输入字符串t 当为@时结束
            if( t>=0 && t<=9){  //如果t是数字
                int a = t - 0;  //那么先把t赋值给a
                while(cin>>t && t>=0 && t<=9)  //因为a有可能是十位数百位数所用while循环判断 如果是的话 还得搞成十位或者百位
                    a=a*10+t-0; //上面要注意一点 记得要>= 否则会出错
                    s.push(a);//把算好的a直接入栈
            }
            if(t == +){  //如果是t是+号  那么按照后缀表达式就将栈顶的两个元素拿出来进行运算 
                int a = s.top();
                s.pop();
                int b = s.top();
                s.pop();
                s.push(b+a);
            } 
            if(t == -){
                int a = s.top();
                s.pop();
                int b = s.top();
                s.pop();
                s.push(b-a);
            }
            if(t == *){
                int a = s.top();
                s.pop();
                int b = s.top();
                s.pop();
                s.push(b*a);
            }
            if(t == /){
                int a = s.top();
                s.pop();
                int b = s.top();
                s.pop();
                s.push(b/a);
            }
        }
        cout<<s.top();  //最后栈顶剩下来的一定会是运算结果
        return 0;
    }
代码实现

这个题,首先你得了解后缀表达式的含义。

如果输入数字就入栈,如果是运算符号就出栈两个元素进行运算,运算完毕后再把结果入栈。

一定不会出现只有一个元素就出现运算符号的情况。(拿中缀表达式来说 运算符左右必须有两个数字一样)

这里代码实现的时候,只考虑数字,如果是数字就入栈。但因为有可能数字的两位到三位甚至四位的话,那么就得求和。 这里只是把“.”当做了一个标志 

如果遇到运算符直接出栈两个元素然后进行运算!

 

附上 后缀表达式与栈的关系讲解链接:http://www.nowamagic.net/librarys/veda/cate/DataStructures

 

以上是关于栈洛谷P1449 后缀表达式的主要内容,如果未能解决你的问题,请参考以下文章

洛谷 P1449 后缀表达式

洛谷P1449 后缀表达式 栈 模拟 字符串

洛谷P1449——后缀表达式(栈模拟)

洛谷 P1449 后缀表达式 题解

洛谷 P1449 后缀表达式 Label:表达式计算系列

[题解]P1449 后缀表达式