90pts求助
查看原帖
90pts求助
304534
qnqfff楼主2021/12/11 17:23

玄学RE...

#include<bits/stdc++.h>
using namespace std;
string s;
long long a[1000010];
long long cnt=0;
stack<char>b;
stack<long long>cao;
long long work(char x){
    return (x=='('||x==')')?0:(x=='+'||x=='-')?1:(x=='*'||x=='/')?2:3;
}
void workk(){
    char fake=b.top();
    long long now=work(b.top());
    b.pop();
    while(!b.empty()&&(work(b.top())>=now&&now!=3)&&now!=0){
    	if(b.top()!='+'&&b.top()!='-'&&b.top()!='*'&&b.top()!='/'&&b.top()!='^')
        	a[++cnt]=b.top()-'0';
        else
        	a[++cnt]=int(b.top());
        b.pop();
    }
    b.push(fake);
}
signed main(){
    cin>>s;
    for(int i=0;i<s.size();i++){
        if(s[i]>='0'&&s[i]<='9'){
            if(s[i]!='+'&&s[i]!='-'&&s[i]!='*'&&s[i]!='/'&&s[i]!='^')
        		a[++cnt]=s[i]-'0';
        	else
        		a[++cnt]=int(s[i]);
        }
        else{
            b.push(s[i]);
            workk();
            if(b.top()==')'){
            	b.pop();
                workk();
				while(!b.empty()&&b.top()!='('){
                	if(b.top()!='+'&&b.top()!='-'&&b.top()!='*'&&b.top()!='/'&&b.top()!='^')
        				a[++cnt]=b.top()-'0';
        			else
        				a[++cnt]=int(b.top());
					b.pop();
				}
				b.pop();
            }
        }
    }
    while(!b.empty()){
        if(b.top()!='+'&&b.top()!='-'&&b.top()!='*'&&b.top()!='/'&&b.top()!='^')
        	a[++cnt]=b.top()-'0';
        else
        	a[++cnt]=int(b.top());
        b.pop();
    }
    for(int i=1;i<=cnt;i++){
    	if((char)a[i]!='+'&&(char)a[i]!='-'&&(char)a[i]!='*'&&(char)a[i]!='/'&&(char)a[i]!='^')
			cout<<a[i]<<' ';
		else
			cout<<(char)a[i]<<' ';
    }
    cout<<endl;
    bool flag=0;
    long long size=cnt;
    while(size!=1){
    	flag=0;
		for(int i=1;i<=size;i++){
			if((char)a[i]!='+'&&(char)a[i]!='-'&&(char)a[i]!='*'&&(char)a[i]!='/'&&(char)a[i]!='^')
            	cao.push(a[i]);
            else if(flag==0){
            	flag=1;
            	long long x=cao.top();
            	cao.pop();
            	long long y=cao.top();
            	cao.pop();
            	switch(a[i]){
            		case '+':{
            			cao.push(x+y);
						break;
					}
					case '-':{
						cao.push(y-x);
						break;
					}
					case '*':{
            			cao.push(x*y);
						break;
					}
					case '/':{
						cao.push(y/x);
						break;
					}
					case '^':{
						cao.push(pow(y,x));
						break;
					}
				}
			}
			else
				cao.push(a[i]);
		}
		size-=2;
		for(int i=size;i>=1;i--){
			a[i]=cao.top();
			cao.pop();
		}
		for(int i=1;i<=size;i++){
    		if((char)a[i]!='+'&&(char)a[i]!='-'&&(char)a[i]!='*'&&(char)a[i]!='/'&&(char)a[i]!='^')
				cout<<a[i]<<' ';
			else
				cout<<(char)a[i]<<' ';
    	}
    	cout<<endl;
    }
}
2021/12/11 17:23
加载中...