P1449 后缀表达式计算
题目描述
所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级)。
如:3*(5–2)+7对应的后缀表达式为:3.5.2.-*7.+@。’@’为表达式的结束符号。‘.’为操作数的结束符号。
输入输出格式
输入格式:
输入:后缀表达式
输出格式:
输出:表达式的值
输入输出样例
说明
转自
https://www.cnblogs.com/unixfy/p/3344550.html
https://www.cnblogs.com/aguncn/p/10656983.html
字符串长度,1000内。
#include<stdio.h>
#include<string.h>
int main()
{
int stack[4000];
int i=0;
char str;
int dig=0;
while((str=getchar())!='@')
{
if(str>='0'&&str<='9')
{
dig*=10;
dig+=str-'0';
} //因为是以字符型输入,不能表示多位数,所以这样
else if(str=='.')
{
stack[i++]=dig;
dig=0; //权值清0;
}
else if(str=='+')
{
stack[i-2]=stack[i-2]+stack[i-1];
stack[i-1]=0; //用变0表示出栈
i--;
}
else if(str=='-')
{
stack[i-2]=stack[i-2]-stack[i-1];
stack[i-1]=0;
i--;
}
else if(str=='*')
{
stack[i-2]=stack[i-2]*stack[i-1];
stack[i-1]=0;
i--;
}
else if(str=='/')
{
stack[i-2]=stack[i-2]/stack[i-1];
stack[i-1]=0;
i--;
}
}
printf("%d\n",stack[0]);
return 0;
}