码迷,mamicode.com
首页 > 其他好文 > 详细

【栈】洛谷P1449 后缀表达式

时间:2016-11-12 13:39:08      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:library   pre   出错   turn   display   lock   rar   实现   sed   

技术分享
    #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 后缀表达式

标签:library   pre   出错   turn   display   lock   rar   实现   sed   

原文地址:http://www.cnblogs.com/OIerLYF/p/6056352.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!