10.13做题——洛谷1449后缀表达式

本题地址: http://www.luogu.org/problem/show?pid=1449

题目描述
所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级)。
如:3*(5–2)+7对应的后缀表达式为:3.5.2.-*7.+@。’@’为表达式的结束符号。‘.’为操作数的结束符号。
输入输出格式
输入格式:
输入:后缀表达式
输出格式:
输出:表达式的值

输入输出样例
输入样例#1:
3.5.2.-*7.+@
输出样例#1:
16

说明
字符串长度,1000内。

解题思路:
用栈模拟后缀表达式即可
即先读入两个数,再计算
按顺序即可
注意:
1谁说数只有一位?
2里面会有’.’,’。’这类无用的符号

#include<iostream>
#include<stack>
//STL STACK 好用,虽然速度慢了点
using namespace std;
stack<int> a;
int main()
{
     cin.sync.with_stdio(false);//理论可加快读入时间,但用洛谷测时间还长些···
    int top,top1;
    char c;
    while(1)
    {
        cin>>c;//先读入,后加减的后缀表达式思想
        if(c=='@')
            break;
        if(c>='0'&&c<='9')
        {
            a.push((c-'0'));
            while(1)//这里处理不止一位的情况
            {
                cin>>c;
                if(!(c>='0'&&c<='9'))
                    break;
                top=a.top();
                a.pop();
                a.push(top*10+c-'0');
            }
        }
        if(c=='+')//加减乘除处理
        {
            top=a.top();
            a.pop();
            top1=a.top();
            a.pop();
            a.push(top+top1);
        }
        else
            if(c=='-')
            {
                top=a.top();
                a.pop();
                top1=a.top();
                a.pop();
                a.push(top1-top);
            }
            else
                if(c=='*')
                {
                    top=a.top();
                    a.pop();
                    top1=a.top();
                    a.pop();
                    a.push(top*top1);
                }
                else
                    if(c=='/')
                    {
                        top=a.top();
                        a.pop();
                        top1=a.top();
                        a.pop();
                        a.push(top1/top);
                    }
    }
    cout<<a.top();
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

posted on 2015-10-13 20:44  VanVleet  阅读(202)  评论(0编辑  收藏  举报

导航