题目描述
所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级)。
如:3*(5–2)+7对应的后缀表达式为:3.5.2.-*7.+@。’@’为表达式的结束符号。‘.’为操作数的结束符号。
输入格式
输入:后缀表达式
输出格式
输出:表达式的值
输入输出样例
输入
3.5.2.-*7.+@
输出
16
说明/提示
字符串长度,1000内。
这道题是一道典型的栈类型的题,思路很简单,就是将每个’.'之前的数字入栈,若遇到加减乘除则出栈两个进行相应计算;
我没有用c++中的stack函数,而是建了一个stack数组来当作栈来使用,更有助于对栈的理解。
代码如下:
#include<iostream>
#include<cstdio>
using namespace std;
long long stack[1000];
int main()
{
long long i=0,now=0;
char op;
while((op=getchar())!='@')
{
if('0'<=op&&op<='9')
{
now*=10;
now+=op-'0';
}
else if(op=='.')
{
stack[++i]=now;
now=0;
}
else if(op=='+')
{
stack[i-1]=stack[i-1]+stack[i];
stack[i]=0;
i--;
}
else if(op=='-')
{
stack[i-1]=stack[i-1]-stack[i];
stack[i]=0;
i--;
}
else if(op=='*')
{
stack[i-1]=stack[i-1]*stack[i];
stack[i]=0;
i--;
}
else if(op=='/')
{
stack[i-1]=stack[i-1]/stack[i];
stack[i]=0;
i--;
}
}
cout<<stack[1];
return 0;
}
欢迎评论补充;