60求调
查看原帖
60求调
677991
chenhaozhe123楼主2025/1/4 12:42
#include<bits/stdc++.h>
using namespace std;
int number[10001];
char symbol[10001];
string s,t;
int i,p;
void push(){
	p++;
	symbol[p]=s[i];
}
void pop(){
	p--;
	switch(symbol[p+1]){
		case '+':	number[p]+=number[p+1]; break;
		case '-':	number[p]-=number[p+1]; break;
		case '*':	number[p]*=number[p+1]; break;
		case '/':	number[p]/=number[p+1]; break;
		case '^':	number[p]=pow(number[p],number[p+1]); break;
	}
}
bool can(){
	if((s[i]=='+'||s[i]=='-')&&(symbol[p]!='(')){
		return true;
	}else if((s[i]=='*'||s[i]=='/')&&(symbol[p]=='^'||symbol[p]=='*'||symbol[p]=='/')){
		return true;
	}else if(s[i]=='^'&&symbol[p]=='^'){
		return true;
	}else{
		return false;
	}
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);
	cin>>s;
	s="("+s+")";
	i=0;p=0;
	while(i<s.size()){
		while(s[i]=='('){
			push();
			i++;
		}
		if(s[i]>='0'&&s[i]<='9'){
			int j=i;
			do{
				i++;
			}while(s[i]>='0'&&s[i]<='9');
			t=s.substr(j,i-j);
			sscanf(t.c_str(),"%d",&number[p]);
		}
		if(s[i]==')'){
			while(symbol[p]!='('){
				pop();
			}
			p--;
			number[p]=number[p+1];
		}else{
			while(can()){
				pop();
			}
			push();
		}
		i++;
	}
	cout<<number[0];
    return 0;
}

2025/1/4 12:42
加载中...