社区讨论

玄关求调

P1175表达式的转换参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mhj1n43g
此快照首次捕获于
2025/11/03 19:15
4 个月前
此快照最后确认于
2025/11/03 19:15
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
int main(){
	string s1;
	int f[100];
	memset(f,0,sizeof(f));
	char s[100],a[100],z[100],top;
	char ztop=' ',zh[100];
	int k=0,m=0,h=0,c=0,zz=0,xy[100];
	int y=0;
	cin>>s1;
	for(int i=0;i<s1.size();i++){
		if(s1[i]=='('){
			zh[zz]='(';
			xy[zz]=i;
			ztop=zh[zz];
			zz++;
		}else if(s1[i]==')'){
			if(ztop!='('||zz==0){
				zh[zz]=')';
				xy[zz]=i;
				ztop=zh[zz];
				zz++;
			}else{
				zz-=2;
				ztop=zh[zz];
				zz++;
			}
		}
	}
	for(int i=0;i<zz;i++){
		f[xy[i]]=3;
	}
	for(int i=0;i<s1.size();i++){
		if(f[i]!=3){
			s[c]=s1[i];
			c++;
		}
	}
	for(int i=0;i<c;i++){
		if('0'<=s[i]&&s[i]<='9'){
			a[k]=' ';
			k++;
			if(s[i-1]=='-'&&i!=0){
				if(s[i-2]<'0'&&s[i-2]!=')'||s[i-2]>'9'&&s[i-2]!=')'||i==1){
					a[k]='-';
					k++;
					a[k]=s[i];
					k++;
				}else{
					a[k]=s[i];
					k++;
				}		
			}else{
				a[k]=s[i];
				if(s[i+1]<'0'||s[i+1]>'9'){
					a[k+1]=' ';
					k+=2;
				}else{
					k++;
				}
			}
		}
		if(y!=0){
			h++;
		}else{
			h=0;
		}
		if(s[i]=='('){
			z[m]='(';
			top=z[m];
			m++;
			y++;
		}else if(s[i]==')'){
			y--;
			m--;
			for(;m>=0;m--){
				if(z[m]!='('){
					a[k]=z[m];
					k++;
				}else{
					break;
				}
			}
			top=z[m-1];
		}else if(s[i]=='+'){
			if(y!=0){
				if(h==0){
					z[m]='+';
					top='+';
					m++;
				}else{
					m--;
					for(;m>=0;m--){
						if(z[m]=='('){
							m++;
							break;
						}
						a[k]=z[m];
						k++;
					}
					z[m]='+';
					top='+';
					m++;
				}
			}else if(m==0){
				z[m]='+';
				top='+';
				m++;
			}else{
				m--;
				for(;m>=0;m--){
					a[k]=z[m];
					k++;
				}
				m++;
				z[m]='+';
				top='+';
				m++;
			}
		}else if(s[i]=='-'){
			if('0'<=s[i-1]&&s[i-1]<='9'||s[i-1]==')'){
				if(y!=0){
					if(h==0){
						z[m]='-';
						top='-';
						m++;
					}else{
						m--;
						for(;m>=0;m--){
							if(z[m]=='('){
								m++;
								break;
							}
							a[k]=z[m];
							k++;
						}
						z[m]='-';
						top='-';
						m++;
					}
				}else if(m==0){
					z[m]='-';
					top='-';
					m++;
				}else{
					m--;
					for(;m>=0;m--){
						a[k]=z[m];
						k++;
					}
					m++;
					z[m]='-';
					top='-';
					m++;
				}
			} 
		}else if(s[i]=='*'){
			if(m==0||top!='*'&&top!='/'&&top!='^'){
				z[m]='*';
				top='*';
				m++;
			}else{
				m--;
				for(;m>=0;m--){
					if(z[m]=='+'||z[m]=='-'||z[m]=='('){
						break;
					}
					a[k]=z[m];
					k++;
				}
				m++;
				z[m]='*';
				top='*';
				m++;
			}
		}else if(s[i]=='/'){
			if(m==0||top!='/'&&top!='*'&&top!='^'){
				z[m]='/';
				top='/';
				m++;
			}else{
				m--;
				for(;m>=0;m--){
					if(z[m]=='+'||z[m]=='-'||z[m]=='('){
						break;
					}
					a[k]=z[m];
					k++;
				}
				m++;
				z[m]='/';
				top='/';
				m++;
			}
		}else if(s[i]=='^'){
			z[m]='^';
			top='^';
			m++;
		}
		a[k]=' ';
		k++;
	}
	m--;
	for(;m>=0;m--){
		a[k]=z[m];
		k++;
	}
	a[k]=' ';
	k++;
	long long zhai[100],n=0,n1=0,aa[100],kk=0,p1=0;
	bool u=0;
	memset(aa,0,sizeof(aa));
	char p[100];
	for(int i=0;i<k;i++){
		if('0'<=a[i]&&a[i]<='9'){
			p[p1]=a[i];
			p1++;
			if(p1==1){
				if(a[i-1]=='-'){
					if(a[i-2]==' '){
						u=1;
					}
				}
			}
		}else if(a[i]==' '&&p1!=0){
			for(int j=p1-1,t=0;j>=0;j--,t++){
				aa[kk]+=pow(10,t)*(p[j]-48);
			}
			if(u==1){
				aa[kk]*=(-1);
				u=0;
			}
			kk++;
			p1=0;
		}
	}
	for(int i=0;i<k;i++){
		if(a[i]!=' '){
			cout<<a[i]<<" ";
		}
	}
	cout<<endl;
	int pp=0;
	for(int i=0;i<k;i++){
		if(pp==0&&'0'<=a[i]&&a[i]<='9'){
			zhai[n]=aa[n1];
			n++;
			n1++;
			pp++;
		}else{
			pp=0;
		}
		if(a[i]=='+'){
			zhai[n-2]=zhai[n-2]+zhai[n-1];
			n--;
		}else if(a[i]=='-'){
			if(a[i+1]==' '){
				zhai[n-2]=zhai[n-2]-zhai[n-1];
				n--;
			} 
		}else if(a[i]=='*'){
			zhai[n-2]=zhai[n-2]*zhai[n-1];
			n--;
		}else if(a[i]=='/'){
			zhai[n-2]=zhai[n-2]/zhai[n-1];
			n--;
		}else if(a[i]=='^'){
			zhai[n-2]=pow(zhai[n-2],zhai[n-1]);
			n--;
		}
		if('0'>a[i]&&a[i]!=' '||'9'<a[i]&&a[i]!=' '){
			for(int j=0;j<n;j++){
				cout<<zhai[j]<<" ";
			}
			for(int j=i+1;j<k;j++){
				if(a[j]!=' '){
					cout<<a[j]<<" ";
				}
			}
			cout<<endl;
		}
	}
	return 0;
}
80分#9#10错了

回复

0 条回复,欢迎继续交流。

正在加载回复...