题目背景 (sb的)波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式 2 + 3 的波兰表示法为 + 2 3。波兰表达式的优点是运算符之间不必有优先级关系,也不必用括号改变运算次序,就比如说 (2 + 3) * 4 的波兰表示法为 * + 2 3 4。
题目描述 求解波兰表达式的计算结果,其中运算符包括 + - * / 四个,运算数全是整数,除法 / 表示整除(也就是除法的商),计算过程中不会出现除数是 0 的情况。- 只表示减法,不会出现对一个整数取相反数的情况。
输入:/ * + 11 12 + -24 -35 - 5 2
输出:-452
老师给的标签是栈,但是我用的是递归。感觉和外星有点像,求大神改。
虽然样例没过,但是1+1+1可以算。
using namespace std;
char ch;
int slove(char ch,int a,int b){
if(ch=='+') return a+b;
if(ch=='-') return a-b;
if(ch=='*') return a*b;
return a/b;
}
int zhuan(string s){
int ans=0;
for(int i=0;i<s.size();i++){
ans+=pow(10,i)*(s[s.size()-1-i]-'0');
}
return ans;
}
int find(char ch){//找到两个数或者算式,算式就继续调用
string s;
int a,b;
cin>>s;
if(s=="/"||s=="*"||s=="-"||s=="+"){
a=find(s[0]);
string s2;
cin>>s2;
if(s2=="/"||s2=="*"||s2=="-"||s2=="+"){
b=find(s[0]);
string s2;
cin>>s2;
}else{
b=zhuan(s2);
}
}else{
a=zhuan(s);
cin>>b;
}
return slove(ch,a,b);
}
int main(){
cin>>ch;
cout<<find(ch);
}