站外题求助
  • 板块学术版
  • 楼主fztt_r9
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/9/5 12:41
  • 上次更新2023/11/2 22:41:33
查看原帖
站外题求助
1016188
fztt_r9楼主2023/9/5 12:41

题目背景 (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); 
}
2023/9/5 12:41
加载中...