记录编号 |
547766 |
评测结果 |
AAAAAAAAAA |
题目名称 |
有括号的算术表达式运算 |
最终得分 |
100 |
用户昵称 |
数声风笛ovo |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.005 s |
提交时间 |
2019-12-13 21:43:24 |
内存使用 |
13.66 MiB |
显示代码纯文本
#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;
}