记录编号 578382 评测结果 AAAAAAAAAA
题目名称 有括号的算术表达式运算 最终得分 100
用户昵称 Gravatarムラサメ 是否通过 通过
代码语言 C++ 运行时间 0.000 s
提交时间 2023-03-11 19:51:39 内存使用 0.00 MiB
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
deque<int> o;
deque<char> p,q;
int check(char z){
	if(z=='^'){
		return 4;
	}
	if(z=='*'||z=='/'){
		return 3;
	}
	if(z=='+'||z=='-'){
		return 2;
	}
	if(z=='('){
		return 1;
	}
}
int main(){
	freopen("ssexpress.in","r",stdin);
	freopen("ssexpress.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	string s;
	cin>>s;
	for(int i=0;i<s.length();i++){
		if(s[i]>='0'&&s[i]<='9'){
			q.push_back(s[i]);
		}
		else{
			if(s[i]=='('){
				p.push_front(s[i]);
			}
			else{
				if(s[i]==')'){
					while(p.front()!='('){
						q.push_back(p.front());
						p.pop_front();
					}
					p.pop_front();
				}
				else{
					if(s[i]=='+'||s[i]=='-'||s[i]=='*'||s[i]=='/'||s[i]=='^'){
						while(check(p.front())>=check(s[i])&&!p.empty()){
							q.push_back(p.front());
							p.pop_front();
						}
						p.push_front(s[i]);
					}
				}
			}
		}
	}
	while(!p.empty()){
		q.push_back(p.front());
		p.pop_front();
	}
	int tmp1,tmp2,tmp3;
	while(!q.empty()){
		if(q.front()>='0'&&q.front()<='9'){
			o.push_front(q.front()-'0');
		}
		else{
			if(q.front()=='+'){
				tmp2=o.front();
				o.pop_front();
				tmp1=o.front();
				o.pop_front();
				o.push_front(tmp1+tmp2);
			}
			else{
				if(q.front()=='-'){
					tmp2=o.front();
					o.pop_front();
					tmp1=o.front();
					o.pop_front();
					o.push_front(tmp1-tmp2);
				}
				else{
					if(q.front()=='*'){
						tmp2=o.front();
						o.pop_front();
						tmp1=o.front();
						o.pop_front();
						o.push_front(tmp1*tmp2);
					}
					else{
						if(q.front()=='/'){
							tmp2=o.front();
							o.pop_front();
							tmp1=o.front();
							o.pop_front();
							o.push_front(tmp1/tmp2);
						}
						else{
							if(q.front()=='^'){
								tmp3=1;
								tmp2=o.front();
								o.pop_front();
								tmp1=o.front();
								o.pop_front();
								for(int i=1;i<=tmp2;i++){
									tmp3*=tmp1;
								}
								o.push_front(tmp3);
							}
						}
					}
				}
			}
		}
		q.pop_front();
	}
	cout<<o.front()<<endl;
	return 0;
}