题目链接
Problem Description
对于一个基于二元运算符的后缀表示式(基本操作数都是一位正整数),求其代表的算术表达式的值。
Input
输入一个算术表达式的后缀式字符串,以‘#’作为结束标志。
Output
求该后缀式所对应的算术表达式的值,并输出之。
Example Input
59684/-3+#
Example Output
57
Hint
基本操作数都是一位正整数!
#include<iostream>
#include<cstring>
#include<stack>
using namespace std;
int Calculate(int a, int b,char ch){
if(ch=='+')
return a+b;
else if(ch=='-')
return a - b;
else if(ch=='*')
return a*b;
else
return a/b;
}
int main(){
stack <int> S;
char s[110];
memset(s,0,sizeof(s));
for(int i = 0;;i++){
cin>>s[i];
if(s[i]=='#')
break;
}
int length = strlen(s);
for(int i = 0;i<length;i++){
if(s[i]=='#'){//到达末尾
cout<<S.top();//输出结果
S.pop();
break;
}
if(s[i]>='0'&&s[i]<='9')
S.push(s[i]-'0');//压栈
else{
int nm1, nm2;
nm1 = S.top();
S.pop();
nm2 = S.top();
S.pop();
S.push(Calculate(nm2,nm1,s[i]));//顺序不能颠倒,因为栈是后进先出
}
}
cout<<endl;
return 0;
}