【栈】洛谷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

 

转载于:https://www.cnblogs.com/OIerLYF/p/6056352.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值