求助
查看原帖
求助
958293
封禁用户楼主2023/9/29 13:33
#include<bits/stdc++.h>
using namespace std;
char s[110];
char pp[110];
int ans[110];
int tot;
stack<char>q;
stack<char>p;
stack<char>mid;
bool pd(char a,char b){
	if(a=='^'&&b!='^') return true;
	else if((a=='*'||a=='/'||a=='^')&&(b!='*'&&b!='/'&&b!='^')) return true;
	else return false;
}
int main(){
	cin>>s;
	for(int i=0;i<strlen(s);i++){
		if(s[i]=='('){
			q.push(s[i]);
			continue;
		}
		if(s[i]>='0'&&s[i]<='9'){
			p.push(s[i]);
			continue;
		}
		if(q.empty()){
			q.push(s[i]);
			continue;
		}
		if(s[i]=='+'||s[i]=='^'||s[i]=='/'||s[i]=='*'||s[i]=='-'){
			if(pd(s[i],q.top())){
				q.push(s[i]);
				continue;
			}
			else{
				char a=q.top();
				while(a!='('&&!pd(s[i],a)){
					p.push(a);
					q.pop();
					if(q.empty()){
						break;
					}
					a=q.top();
				}
				q.push(s[i]);
				continue;
			}
		}
		if(s[i]==')'){
			char a=q.top();
			while(a!='('){
				p.push(a);
				q.pop();
				a=q.top();
			}
			q.pop();
			continue;
		}
	}
	while(!q.empty()){
		p.push(q.top());
		q.pop();
	}
	while(!p.empty()){
		mid.push(p.top());
		p.pop();
	}
	while(!mid.empty()){
		pp[++tot]=mid.top();
		mid.pop();
	}
	for(int i=1;i<=tot;i++){//更换数据结构 
		cout<<pp[i]<<" ";
	} 
	cout<<endl;
	int cnt=0;
	for(int i=1;i<=tot;i++){
		if(pp[i]>='0'&&pp[i]<='9'){
			ans[++cnt]=pp[i]-'0';
		}else{
			if(pp[i]=='+'){
				int aa=ans[cnt];
				cnt--;
				int bb=ans[cnt];
				cnt--;
				int cc=aa+bb;
				ans[++cnt]=cc;
				for(int j=1;j<=cnt;j++){
					cout<<ans[j]<<" ";
				}
				for(int j=i+1;j<=tot;j++){
					cout<<pp[j]<<" ";
				}
				cout<<endl;
			}
			if(pp[i]=='-'){
				int aa=ans[cnt];
				cnt--;
				int bb=ans[cnt];
				cnt--;
				int cc=bb-aa;
				ans[++cnt]=cc;
				for(int j=1;j<=cnt;j++){
					cout<<ans[j]<<" ";
				}
				for(int j=i+1;j<=tot;j++){
					cout<<pp[j]<<" ";
				}
				cout<<endl;
			}
			if(pp[i]=='/'){
				int aa=ans[cnt];
				cnt--;
				int bb=ans[cnt];
				cnt--;
				int cc=bb/aa;
				ans[++cnt]=cc;
				for(int j=1;j<=cnt;j++){
					cout<<ans[j]<<" ";
				}
				for(int j=i+1;j<=tot;j++){
					cout<<pp[j]<<" ";
				}
				cout<<endl;
			}
			if(pp[i]=='*'){
				int aa=ans[cnt];
				cnt--;
				int bb=ans[cnt];
				cnt--;
				int cc=aa*bb;
				ans[++cnt]=cc;
				for(int j=1;j<=cnt;j++){
					cout<<ans[j]<<" ";
				}
				for(int j=i+1;j<=tot;j++){
					cout<<pp[j]<<" ";
				}
				cout<<endl;
			}
			if(pp[i]=='^'){
				int aa=ans[cnt];
				cnt--;
				int bb=ans[cnt];
				cnt--;
				int cc=pow(bb,aa);
				ans[++cnt]=cc;
				for(int j=1;j<=cnt;j++){
					cout<<ans[j]<<" ";
				}
				for(int j=i+1;j<=tot;j++){
					cout<<pp[j]<<" ";
				}
				cout<<endl;
			}
		}
	}
	return 0;
}

Subtask #1WA了

2023/9/29 13:33
加载中...