求助QAQ
查看原帖
求助QAQ
576168
HL_HuangJiazhi楼主2022/4/9 14:49
#include<bits/stdc++.h>
using namespace std;
char cs[1001], s[1001], ch;
map<char, int> mp;
int x, top;
struct node{
	//digit-false;
	bool flag;
	char c;
	int num;
} q[100001];
int f = 1, t = 0;
int a[1001], Top;
int main(){
	mp['+']=mp['-']=1;
	mp['*']=mp['/']=2;
	mp['^']=3;
	cin.getline(cs, 1001);
	int l = strlen(cs);
	for(int i = 0; i < l; i++){
		if(cs[i]<='9'&&cs[i]>='0') x=x*10+cs[i]-'0';
		else{
			if(cs[i]==')'){
				q[++t].flag=0, q[t].num=x, x = 0;
				while(top>0&&cs[i]==')'&&s[top]!='(') q[++t].flag=1, q[t].c=s[top--];
				s[top] = cs[i];
				continue;
			}
			if(cs[i]=='('){
				s[++top]=cs[i];
				continue;
			}
			if(s[top]==')') top--;
			else q[++t].flag=0, q[t].num=x, x=0;
			while(top>0&&s[top]!='('&&mp[s[top]]>=mp[cs[i]]) q[++t].flag=1, q[t].c=s[top--];
			s[++top]=cs[i];
		}
		if(i==l-1) q[++t].flag=0, q[t].num=x, x = 0;
	}
	while(top>0) q[++t].flag=1, q[t].c=s[top--];
	
	
	for(int i = f; i <= t; i++){
		if(q[i].flag) printf("%c ", q[i].c);
		else printf("%d ", q[i].num);
	}
	printf("\n");
	int e = t;
	while(f<t){
		e=t;
		while(q[f].flag==0) a[++Top] = q[f].num, q[++t].num=q[f++].num;
		t-=2;
		if(q[f].c=='+') q[++t].num=a[Top-1]+a[Top];
		else if(q[f].c=='-') q[++t].num=a[Top-1]-a[Top];
		else if(q[f].c=='*') q[++t].num=a[Top-1]*a[Top];
		else if(q[f].c=='/') q[++t].num=a[Top-1]/a[Top];
		else if(q[f].c=='^'){
			q[++t].num=1;
			for(int i = 1; i <= a[Top]; i++) q[t].num*=a[Top-1];
		}
		f++, Top=0;
		while(f<=e)
			q[++t].c=q[f].c, q[t].flag=q[f].flag, q[t].num=q[f++].num;
		for(int i = f; i <= t; i++){
			if(q[i].flag) printf("%c ", q[i].c);
			else printf("%d ", q[i].num);
		}
		printf("\n");
	}
	return 0;
}
//53*4+2*(5+7)-3
//53 4 * 2 5 + 7 * + 3 -
//53*4+2*5+7-3
//53 4 * 2 5 * + 7 + 3 -

全部WA,但是样例和自己的数据都过了 不知道错在哪里

QAQ

2022/4/9 14:49
加载中...