RE on #3#9#10求助
查看原帖
RE on #3#9#10求助
760776
zzy_zzy楼主2023/6/28 13:40

RT.

#include<bits/stdc++.h>
using namespace std;
int yxj(char ch){
	if(ch=='('||ch==')'){
		return 1;
	}
	else if(ch=='+'||ch=='-'){
		return 2;
	}
	else if(ch=='*'||ch=='/'){
		return 3;
	}
	else{
		return 4;
	}
}
stack<char>st;
int getnum(int l,string s){
	int k=s.size(),sum=0;
	for(int i=l;i<k;i++){
		if(s[i]>='0'&&s[i]<='9'){
			sum*=10;
			sum+=s[i]-'0';
		}
		else{
			break;
		}
	}
	return sum;
}
string to__string(int x){
	stack<int>stt;
	string s;
	while(x){
		stt.push(x%10);
		x/=10;
	}
	while(stt.size()){
		s+=char(stt.top()+'0');
		stt.pop();
	}
	return s;
}
stack<int>st1;
string solve(string s){
	if(s[s.size()-2]>='0'&&s[s.size()-2]<='9'){
		exit(0);
	}
	int k=s.size(),weizhi1=0,weizhi2=0,pp=0;
	long long sum=0;
	for(int i=0;i<k;i++){
		if(s[i]>='0'&&s[i]<='9'&&(i==0||!(s[i-1]>='0'&&s[i-1]<='9'))){
			st1.push(getnum(i,s));
			pp=weizhi1;
			weizhi1=i;
		}
		else if(s[i]=='+'||s[i]=='-'||s[i]=='*'||s[i]=='/'||s[i]=='^'){
			weizhi2=i;
			int o=st1.top();
			st1.pop();
			int p=st1.top();
			st1.pop();
			weizhi1=pp;
			if(s[i]=='+'){
				sum=o+p;
			}
			else if(s[i]=='-'){
				sum=p-o;
			}
			else if(s[i]=='*'){
				sum=p*o;
			}
			else if(s[i]=='/'){
				sum=p/o;
			}
			else{
				sum=pow(p,o);
			}
			break;
		}
	}
	string sans;
	for(int i=0;i<weizhi1;i++){
		sans+=s[i];
	}
	sans+=to__string(sum);
	for(int i=weizhi2+1;i<k;i++){
		sans+=s[i];
	}
	cout<<endl<<sans;
	while(st1.size()){
		st1.pop();
	}
	return solve(sans);
}

int main(){
	string s,s1;
	cin>>s;
	int k=s.size();
	for(int i=0;i<k;i++){
		if(s[i]>='0'&&s[i]<='9'&&(i==0||!(s[i-1]>='0'&&s[i-1]<='9'))){
			cout<<getnum(i,s)<<" ";
			s1+=to__string(getnum(i,s));
			s1+=" ";
		}
		else if(s[i]=='('){
			st.push(s[i]);
		}
		else if(s[i]==')'){
			while(st.top()!='('){
				cout<<st.top()<<" ";
				s1+=st.top();
				s1+=" ";
				st.pop();
			}
			st.pop();
		}
		else if(s[i]=='^'){
			st.push(s[i]);
		}
		else if(s[i]=='+'||s[i]=='-'||s[i]=='*'||s[i]=='/'){
			while(st.size()&&yxj(s[i])<=yxj(st.top())){
				cout<<st.top()<<" ";
				s1+=st.top();
				s1+=" ";
				st.pop();
			}
			st.push(s[i]);
		}
	}
	while(st.size()){
		cout<<st.top()<<" ";
		s1+=st.top();
		s1+=" ";
		st.pop();
	}
	cout<<solve(s1);
	return 0;
}

哪位dalao来帮一帮juruo,已经调了两天半了

2023/6/28 13:40
加载中...