• 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;
    }
    

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

  • 相关阅读:
    [thinkphp] 是如何输出一个页面的
    [thinkphp] 获取根目录绝对路径
    onethink 插件模板定位
    win7 安全模式开启声音
    百度贴吧楼层评论地址
    第一天问题
    [php] 解析JSON字符串
    NDK编译时两 .so之间调用问题
    CDN问题积累
    C++模板特化
  • 原文地址:https://www.cnblogs.com/wuhu-xiaoshen/p/4918632.html
Copyright © 2020-2023  润新知