[luogu p1449] 后缀表达式

传送门

后缀表达式

题目描述

所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级)。

如:3*(5–2)+7对应的后缀表达式为:3.5.2.-*7.+@。'@'为表达式的结束符号。'.'为操作数的结束符号。

输入输出格式

输入格式

输入:后缀表达式

输出格式

输出:表达式的值

输入输出样例

输入样例 #1

3.5.2.-*7.+@

输出样例 #1

16

说明

字符串长度,1000内。

分析

一道裸stack,读入数直接把数入stack,读入运算符直接把stack顶端的两个数进行相应的运算得到一个数,把原来的两个数pop掉,再把新数push进去就好了。

思维难度倒是挺简单的,但是因为我很菜,有一个小bug调了很久。

代码

/*
 * @Author: crab-in-the-northeast 
 * @Date: 2020-03-07 12:31:18 
 * @Last Modified by: crab-in-the-northeast
 * @Last Modified time: 2020-03-08 15:53:05
 */
#include <iostream>
#include <cstdio>
#include <stack>

const int maxn = 1005;
int s[maxn];
int top;
long long num;

int main() {
    char ch;
    ch = getchar();
    while(ch != '@') {
        if(ch >= '0' && ch <= '9') num = num * 10 + ch - '0';
        if(ch == '.') {
            s[++top] = num;
            num = 0;
        }
        switch(ch) {
            case '+': s[top - 1] += s[top];break;
            case '-': s[top - 1] -= s[top];break;
            case '*': s[top - 1] *= s[top];break;
            case '/': s[top - 1] /= s[top];break;
        }

        if(ch == '+' || ch == '-' || ch == '*' || ch == '/')
            top--;

        ch = getchar();
    }
    printf("%d
",s[1]);
    return 0;
}

评测结果

AC 100: R31474274

原文地址:https://www.cnblogs.com/crab-in-the-northeast/p/luogu-p1449.html