萌新求助,这题60分,求教
查看原帖
萌新求助,这题60分,求教
761484
yangjintian楼主2022/7/31 22:12
#include<bits/stdc++.h>
using namespace std;
long long a,l,n,l1;
bool flag=1;
string sa[2005],k,s1[2005];
stack<long long> s;
void Num(long long x){
	s.push(x);
}
void Pop(){
	if(s.empty()){
        cout<<"ERROR!\n";
        flag=0;
    }else s.pop();
}
void Inv(){
	if(s.empty()){
        cout<<"ERROR!\n";
        flag=0;
    }else{
		long long o=s.top();
		if(abs(o+o)>1000000000){
            cout<<"ERROR!\n";
            flag=0;
		}else{
			s.pop();
			s.push(o-o-o);
		}
	}
}
void Dup(){
	if(s.empty()){
        cout<<"ERROR!\n";
        flag=0;
    }
	else s.push(s.top());
}
void Swp(){
	if(s.size()<2){
        cout<<"ERROR!\n";
        flag=0;
    }
	else {
		long long o=s.top();
		s.pop();
		long long u=s.top();
		s.pop();
		s.push(o);
		s.push(u); 
	}
}
void Add(){
	if(s.size()<2){
        cout<<"ERROR!\n";
        flag=0;
    }
	else{
		long long o=s.top();
		s.pop();
		long long u=s.top();
		s.pop();
		if(abs(o+u)>1000000000){
            cout<<"ERROR!\n";
            flag=0;
        }
		else{
			s.push(o+u);
		}
	}
}
void Mul(){
	if(s.size()<2){
        cout<<"ERROR!\n";
        flag=0;
    }else{
		long long o=s.top();
		s.pop();
		long long u=s.top();
		s.pop();
		if(abs(o*u)>1000000000){
            flag=0;
            cout<<"ERROR!\n";
        }
		else{
			s.push(o*u);
		}
	}
}
void Sub(){
	if(s.size()<2){
        cout<<"ERROR!\n";
        flag=0;
    }else{
		long long o=s.top();
		s.pop();
		long long u=s.top();
		s.pop();
		if(abs(u-o)>1000000000){
            cout<<"ERROR!\n";
            flag=0;
        }
		else{
			s.push(u-o);
		}
	}
}
void Div(){
	if(s.size()<2){
        cout<<"ERROR!\n";
        flag=0;
    }else{
		long long o=s.top();
		s.pop();
		long long u=s.top();
		s.pop();
		if(o==0){
            cout<<"ERROR!\n";
            flag=0;
        }else{
			if(abs(u/o)>1000000000){
                cout<<"ERROR!\n";
                flag=0;
            }else{
				s.push(u/o);
			}
		}
	}
}
void Mod(){
	if(s.size()<2){
        cout<<"ERROR!\n";
        flag=0;
    }else{
		long long o=s.top();
		s.pop();
		long long u=s.top();
		s.pop();
		if(abs(u%o)>1000000000){
            cout<<"ERROR!\n";
            flag=0;
        }else{
			s.push(u%o);
		}
	}
}
void End(){
	if(s.size()!=1){
        cout<<"ERROR!\n";
        flag=0;
    }else cout<<s.top()<<endl;
}
bool check(string s){
	if(s[0]=='-')s.erase(0,1);
	int cnt1=0,cnt2=0;
	for(int i=0;i<s.size();i++){
		if(s[i]=='1')cnt1++;
		if(s[i]=='0')cnt2++;
	}
	if(s.size()>10)return true;
	else{
		if(s.size()==10&&(cnt1!=1||cnt2!=9))return true;
	}
	return false;
}
int main(){
	while(cin>>sa[++l]){
        if(sa[l]=="NUM"){
            cin>>s1[++l1];
        }
		if(sa[l]=="END")break;
	}
	cin>>n;
	for(int j=1;j<=n;j++){
		flag=1;
		while(!s.empty()){
			s.pop();
		}
		cin>>k;
		if(check(k)){
			cout<<"ERROR!\n";
			continue;
		}
		stringstream ss;
		long long b=0;
		ss<<k;
		ss>>b;
		s.push(b);
        int l2=0;
		for(int i=1;i<=l;i++){
			if(sa[i]=="NUM"){
				++l2;
				if(check(s1[l2])){
					cout<<"ERROR!\n";
					break;
				}
				stringstream ss1;
				long long b1=0;
				ss1<<s1[l2];
				ss1>>b1;
                Num(b1);
            }else if(sa[i]=="POP"){
            	Pop();
			}else if(sa[i]=="INV"){
            	Inv();
			}else if(sa[i]=="DUP"){
            	Dup();
			}else if(sa[i]=="SWP"){
            	Swp();
			}else if(sa[i]=="ADD"){
            	Add();
			}else if(sa[i]=="SUB"){
            	Sub();
			}else if(sa[i]=="MUL"){
            	Mul();
			}else if(sa[i]=="DIV"){
            	Div();
			}else if(sa[i]=="MOD"){
            	Mod();
			}else if(sa[i]=="END"){
            	End();
			}
			if(!flag)break;
		}
	}
}
2022/7/31 22:12
加载中...