zoukankan      html  css  js  c++  java
  • 洛谷P1449——后缀表达式(栈模拟)

    题目描述

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

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

    输入输出格式

    输入格式:

    输入:后缀表达式

    输出格式:

    输出:表达式的值

    输入输出样例

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

    说明

    字符串长度,1000内。

    只要用STL stack就可以了

    遇到数字就记下来,遇到点号就把当前数字压栈

    遇到操作符就从栈顶取两个数字进行运算

     1 #include<cstdio>
     2 #include<algorithm>
     3 #include<iostream>
     4 #include<stack>
     5 #include<cstring>
     6 using namespace std;
     7 char s[1010];
     8 stack<int> st;
     9 int main()
    10 {
    11     int tmp=0,t;
    12     gets(s);
    13     int len=strlen(s);
    14     for (int i=0;i<len-1;i++) {
    15         if (s[i]>='0' && s[i]<='9') {
    16             tmp=tmp*10+s[i]-'0';
    17         }
    18         else {
    19             if (s[i]=='.') {
    20                 st.push(tmp);
    21                 tmp=0;
    22             }
    23             else {
    24                 int x,y;
    25                 x=st.top(); st.pop();
    26                 y=st.top(); st.pop();
    27                 switch (s[i]) {
    28                     case '+' : {
    29                         t=y+x;
    30                         st.push(t);
    31                         break;
    32                     }
    33                     case '-' : {
    34                         t=y-x;
    35                         st.push(t);
    36                         break;
    37                     }
    38                     case '*' : {
    39                         t=y*x;
    40                         st.push(t);
    41                         break;
    42                     }
    43                     case '/' : {
    44                         t=y/x;
    45                         st.push(t);
    46                         break;
    47                     }
    48                 }
    49             }
    50         }
    51     }
    52     printf("%d
    ",st.top());
    53     return 0;
    54 }
  • 相关阅读:
    前端PC人脸识别登录
    html2canvas 轮播保存每个图片内容
    基于Element的下拉框,多选框的封装
    聊聊 HTTPS
    从 rails 窥探 web 全栈开发(零)
    理解 Angular 服务
    Vue3 与依赖注入
    一次 HTTP 请求就需要一次 TCP 连接吗?
    GO 语言入门(一)
    读 Angular 代码风格指南
  • 原文地址:https://www.cnblogs.com/YingZhixin/p/6551200.html
Copyright © 2011-2022 走看看