请求加强数据
查看原帖
请求加强数据
704655
CAICAIA楼主2023/9/3 20:09

rt,第二个样例没过,直接

A了

#include<bits/stdc++.h>
using namespace std;
string ss;
int you(char ch){
    if(ch=='('||ch==')'){
        return -1;
    }
    else if(ch=='+'||ch=='-'){
        return 1;
    }
    else if(ch=='*'||ch=='/'){
        return 2;
    }
    else if(ch=='^'){
        return 3;
    }
    else{
        return -1;
    }
}
vector<string> ys;
string change1(int i){
	stringstream sas;
	string sss;
	sas<<i;
	sas>>sss;
	return sss;
}
int change2(string i){
	stringstream sas;
	int sss;
	sas<<i;
	sas>>sss;
	return sss;
}
void print(){
	int len=ys.size();
	for(int i=0;i<len;i++){
		cout<<ys[i]<<" ";
	}
	printf("\n");
	return ;
}
int main(){
    int len,lengh=0;
    cin>>ss;
    len=ss.size();
    
    stack<char> num;
    stack<char> dat;
    for(int i=0;i<len;i++){
        if(ss[i]>='0'&&ss[i]<='9'){
        	num.push(ss[i]);
        	lengh++;
		}
		else if(ss[i]==')'){
			char to;
			to=dat.top();
			while(to!='('){
				num.push(to);
				dat.pop();
				to=dat.top();
			}
			dat.pop();
		}
		else if(ss[i]=='('){
			dat.push(ss[i]);
		}
		else{
			if(!dat.empty()){
				
				while(you(dat.top())>=you(ss[i])){
					//cout<<dat.top()<<"  "<<dat.empty()<<"\n";

					if(dat.top()=='^'&&ss[i]=='^'){
						break;
					}
					num.push(dat.top());
					dat.pop();
					if(dat.empty()){
						break;
					}
				}
				//printf("aa\n");
			}
			dat.push(ss[i]);
		}
    }
    
    while(!dat.empty()){
		num.push(dat.top());
		dat.pop();
	}
	string ss;
	while(!num.empty()){
		ss="";
		//cout<<num.top()<<" ";
		ss+=num.top();
		ys.push_back(ss);
		//s+=" ";
		num.pop();
	}
	len=ys.size();
	for(int i=0;i<len/2;i++){
		swap(ys[i],ys[len-i-1]);
	}
	/*
	ys.insert(ys.begin()+1,"aa");
	*/
	print();
	int now;
	for(int i=0;i<lengh;i++){
		if(ys[i]=="+"||ys[i]=="-"||ys[i]=="*"||ys[i]=="/"||ys[i]=="^"){
			now=i-1;
			break;
		}
		//printf("aanow=%d\n",i);
	}
	//printf("aanow=%d\n",now);
	for(int i=1;i<lengh;i++){
		if(ys[now+1]=="+"){
			ys[now-1]=change1(change2(ys[now-1])+change2(ys[now]));
			ys.erase(ys.begin()+now);
			ys.erase(ys.begin()+now);
		}
		else if(ys[now+1]=="-"){
			ys[now-1]=change1(change2(ys[now-1])-change2(ys[now]));
			ys.erase(ys.begin()+now);
			ys.erase(ys.begin()+now);
		}
		else if(ys[now+1]=="*"){
			ys[now-1]=change1(change2(ys[now-1])*change2(ys[now]));
			ys.erase(ys.begin()+now);
			ys.erase(ys.begin()+now);
		}
		else if(ys[now+1]=="/"){
			ys[now-1]=change1(change2(ys[now-1])/change2(ys[now]));
			//cout<<ys[now-1]<<endl;
			ys.erase(ys.begin()+now);
			ys.erase(ys.begin()+now);
		}
		else if(ys[now+1]=="^"){
			//cout<<ys[now-1]<<endl;
			ys[now-1]=change1(pow(change2(ys[now-1]),change2(ys[now])));
			ys.erase(ys.begin()+now);
			ys.erase(ys.begin()+now);
		}
		else{
			print();
			continue;
		}
		for(int i=0;i<lengh;i++){
			if(ys[i]=="+"||ys[i]=="-"||ys[i]=="*"||ys[i]=="/"||ys[i]=="^"){
				now=i-1;
				break;
			}
		}
	//	printf("now=%d\n",now);
		print();
		
	}
    return 0;
}
2023/9/3 20:09
加载中...