洛谷 p1449 后缀表达式 题解

很明显, 这是一道水题,用来消磨时间.(大误
P1449 后缀表达式

几个坑点

或许是对我来说的坑
** 一个数字不止一位 ** ** 没有小数, 不用开double ** ** 要注意操作符号两边的操作数的顺序,a-b和b-a是不一样的 **

思路

  1. 读入
  2. 开栈记录数据, 每读入一个数就存起来, 每读到一个操作符号, 就取出栈顶的两个数, 运算, 再存起来.
  3. 输出栈顶

代码

#include<bits/stdc++.h>
using namespace std;
stack<int> s; //开栈
void work(char a)
{
int op1,op2;
op1=s.top();
s.pop();
op2=s.top();
s.pop(); //取栈顶的两个数为操作数
if(a=='+')
{
s.push(op2+op1);
}
else if(a=='-')
{
s.push(op2-op1);
}
else if(a=='*')
{
s.push(op2*op1);
}
else if(a=='/')
{
s.push(op2/op1);
} //计算后再压入栈顶
}
void read() //读入
{
char a;
int n=0;
while((a=getchar())!='@') //读到@, 就终止
if(a>='0'&&a<='9') //如果是数字
{ //改变临时存储的此数字大小
n*=10;
n+=a-'0';
}
else if(a=='.') //如果一个数字结束了
{
s.push(n); //将数字从临时存储存进栈
n=0;
}
else
work(a); //如果是操作符, 就进行运算
}

int main()
{
read(); //读入
cout<<s.top()<<endl; //输出
return 0;
}

截图

这真的只是一张图片啦
over :D

Author: Odeinjul
Link: http://odeinjul.ooo/lg-p1449.html
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.