19009 后缀表达式

 为了简单,此题目设计时限定所有数字均小于10。

解题思路:逆波兰式即后缀表达式,是栈结构的典型应用之一。
在扫描字符串的过程中,只有两种处理方式,数字入栈,运算符出栈顶两个元素,计算结果入栈。

#include <iostream>
#include <stack>
using namespace std;
string s;
stack <long long> st;/**< STL提供的栈结构 */
int main()
{
    long long i,j,x1,x2;
    getline(cin,s);/**< 使用string类型读取一行,如果是用c语言等价于: char  s[100];  gets(s)*/
    i=0;
    while(s[i]!='@')
    { /**< 三种情况,数字,运算符,其他 */
        if(isdigit(s[i]))
            st.push(s[i]-'0');
        else if(s[i]=='+'||s[i]=='-'||s[i]=='*'||s[i]=='/')
        {
            x2=st.top();st.pop();x1=st.top();st.pop();/**< 出2个,注意次序 */
            switch(s[i])
            {
                case '+':st.push(x1+x2);break;/**< 结果进栈 */
                case '-':st.push(x1-x2);break;
                case '*':st.push(x1*x2);break;
                case '/':st.push(x1/x2);break;
            }
        }
        i++;
    }
    cout<<st.top();
    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>