zoukankan      html  css  js  c++  java
  • [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

  • 相关阅读:
    vue.js生成纵向拓扑图
    vue.js生成横向拓扑图
    Vue.js中使用wangEditor富文本编辑器
    文件上传与下载,PDF与Excel的操作
    Element布局实现日历布局
    golang时间转换
    iView学习笔记(四):Form表单操作
    iView学习笔记(三):表格搜索,过滤及隐藏列操作
    iView学习笔记(二):Table行编辑操作
    iView学习笔记(一):Table基本操作(包含前后端示例代码)
  • 原文地址:https://www.cnblogs.com/crab-in-the-northeast/p/luogu-p1449.html
Copyright © 2011-2022 走看看