比赛 20191211 评测结果 AAAAAAAAAA
题目名称 有括号的算术表达式运算 最终得分 100
用户昵称 数声风笛ovo 运行时间 0.005 s
代码语言 C++ 内存使用 13.66 MiB
提交时间 2019-12-13 21:43:43
显示代码纯文本
#include<bits/stdc++.h>
#define qwe cout<<"qwq "
using namespace std;
string str,fin="";
stack<int> ovo,suan;
int wei(char ch){
	if (ch=='@') return 0;
	if (ch=='+'||ch=='-') return 1;
	if (ch=='*'||ch=='/') return 2;
	if (ch=='^') return 3;
	return -1;
}
void judge(int ch){
    bool qwq=true;
    while(qwq){
        if(ovo.empty()||(!ovo.empty()&&(wei(str[ovo.top()])<wei(str[ch])))){
	  		ovo.push(ch);
	  		qwq=false;
	 	} 
		else{
			while(!ovo.empty()&&(wei(str[ovo.top()])>=wei(str[ch]))){
				fin+=str[ovo.top()];ovo.pop();
			}
		}
	}
}
void kuohao(){
	if(!ovo.empty()){
		while(str[ovo.top()]!='('){
			fin+=str[ovo.top()];
			ovo.pop();
		}ovo.pop();
	}
}
void comp(){
	for(int i=0;i<fin.length();i++){
		if(fin[i]>='0'&&fin[i]<='9'){
	    	suan.push(fin[i]-48);
	    }
	    else{
	    	int a,b;
	    	a=suan.top();suan.pop();
	    	b=suan.top();suan.pop();
	    	if(fin[i]=='+') suan.push(a+b);
	    	else if(fin[i]=='-') suan.push(b-a);
	    	else if(fin[i]=='*') suan.push(a*b);
	    	else if(fin[i]=='/') suan.push(b/a);
	    	else if(fin[i]=='^') suan.push(pow(b,a));
	    }
	}
	printf("%d\n",suan.top());
	return ;	
}
int main(){
	freopen("ssexpress.in","r",stdin);
	freopen("ssexpress.out","w",stdout);
	cin>>str;
	for(int i=0;i<str.length();i++){
	    if(str[i]>='0'&&str[i]<='9'){
	    	fin+=str[i];
	    }
	    else if(str[i]=='+'||str[i]=='-'||str[i]=='*'||str[i]=='/'||str[i]=='^'){
	    	judge(i);
	    }
		else if(str[i]=='('){
			ovo.push(i);
		} 
		else if(str[i]==')'){
			kuohao();
		} 
	}
	while(!ovo.empty()){
		fin+=str[ovo.top()];
		ovo.pop();
	}
	comp();
	return 0;
}