1499-luogu洛谷 后缀表达式

题目描述

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

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

输入输出格式

输入格式:

 

输入:后缀表达式

 

输出格式:

 

输出:表达式的值

 

输入输出样例

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

说明

字符串长度,1000内。

 

------------------------------------------分割线再次上线-----------------------------------------------------------------------------------------------------------------------------------------

 

 

确认过眼神

水题本题

依旧

更水

 

一道栈的模拟

但有很多细节需要关注

我就是败在这了

 

比如
1.有的计数器需要清0

  n在这里表示的是输入的数(由字符转化而来的) 当它遇到‘.’的时候 把n压进栈后 n的值就清0 为了记下一个数

2.某些变量的初始值

  n的初始值应为0 否则也易出错

3.if判断到@的时候就直接printf并return 0 以免出错

4.先进栈的后出 运算法则是从左到右 先出栈的是右面的

 

以上

 

==========================================这是一个不一样的分割线=========================================================

#include<cstdio>
#include<stack>
using namespace std;
 
stack<int> a;
int main()
{
 int n=0,sum;
 char m;
 while(scanf("%c",&m))
 {
  if(m == '@')
  {
   printf("%d",a.top());
   return 0;
  }
  else
   if(m>='0' && m<='9')
    n=n*10+m-'0';
   else
    if(m == '.')
    {
     a.push(n);
     n=0;
    }
    else
    {
     int x=a.top();a.pop();
     int y=a.top();a.pop();
     if(m =='+')
     {
      sum=x+y;
      a.push(sum);
     }
     if(m == '-')
     {
      sum =y-x;
      a.push(sum);
     }
     if(m == '*')
     {
      sum =x*y;
      a.push(sum);
     }
     if(m == '/')
     {
      sum =y/x;
      a.push(sum);
     }
    }
 }
}
posted @ 2019-01-20 20:05  darrrr  阅读(240)  评论(0编辑  收藏  举报