首页 > 代码库 > 【栈】洛谷P1449 后缀表达式

【栈】洛谷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 后缀表达式