后缀表达式的计算过程
1:遇到操作数时,入栈
2:遇到运算符时,取栈顶操作数1后把该数弹出
取出栈顶操作数2后把该数弹出
根据对应的操作数计算结果后将结果入栈
最后栈中的值就是要求的结果
代码如下:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<stack>
using namespace std;
int main()
{
char str[1001];
gets(str);
int len = strlen(str);
stack<int> s;
for(int i=0;i<len;i++){
if(str[i]=='+' || str[i]=='-' || str[i]=='*' ||str[i]=='/'){
int data2 = s.top();
s.pop();
int data1 = s.top();
s.pop();
if(str[i]=='+'){
s.push(data1 + data2);
}else if(str[i]=='-'){
s.push(data1 - data2);
}else if(str[i]=='*'){
s.push(data1 * data2);
}else{
s.push(data1 / data2);
}
}else if(str[i]==' '){
continue;
}else{
int data = 0;
while(str[i]!=' '){
data = data*10 + str[i]-'0';
i++;
}
s.push(data);
}
}
printf("%d",s.top());
return 0;
}
输入时运算符、操作数之间用一个空格分隔
测试样例: