Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
119039 | 梁颢城 | 后序表达式 | C++ | 内存超限 | 0 | 1151 MS | 131108 KB | 2884 | 2024-01-03 13:45:17 |
#include<bits/stdc++.h> using namespace std; char ch; stack<double> OPND; stack<char> OPTR; bool f(char t){ if(t=='+'||t=='-'||t=='*'||t=='/'||t=='('||t==')'||t=='=') return 1; return 0; } double cal(double t1,double t2,char c){ switch(c){ case '+':return t1+t2; case '-':return t1-t2; case '*':return t1*t2; case '/':return t1/t2; } return 0; } int cmp(char t1,char t2){ int q1=0,q2=0; switch(t1){ case '+':q1=1;break; case '-':q1=1;break; case '*':q1=2;break; case '/':q1=2;break; case '(':q1=0;break; case ')':q1=-1;break; } switch(t2){ case '+':q2=1;break; case '-':q2=1;break; case '*':q2=2;break; case '/':q2=2;break; case '(':q2=0;break; case ')':q2=-1;break; } if(q1==-1&&q2==0) return 0; if(q1>q2) return 2; if(q1<=q2) return 1; return -1; } double z() { double ans=0; int a[1000],i=0,flag=0; a[++i]=ch-'0'; while(cin>>ch&&!f(ch)) { if(ch=='.') { flag=i; continue; } a[++i]=ch-'0'; } if(flag==0) flag=i; for(int j=1;j<=i;j++) { ans+=a[j]*pow(10,flag-j); } return ans; } int main(){ double t1,t2,t3; while(cin>>ch&&ch!='=') { if(f(ch)) { OPTR.push(ch); cin>>ch; } else { OPND.push(z()); } while(ch!='=') { if(f(ch)) { if(OPTR.empty()) { OPTR.push(ch); cin>>ch; continue; } if(cmp(ch,OPTR.top())==1) { OPTR.push(ch); cin>>ch; continue; } else if(cmp(ch,OPTR.top())==2){ char c1=ch; cin>>ch; t2=z(); t1=OPND.top(); OPND.pop(); t3=cal(t1,t2,c1); OPND.push(t3); } else{ OPTR.pop(); cin>>ch; } } else{ OPND.push(z()); } } while(!OPTR.empty()){ ch=OPTR.top(); OPTR.pop(); t2=OPND.top(); OPND.pop(); t1=OPND.top(); OPND.pop(); t3=cal(t1,t2,ch); OPND.push(t3); } printf("%.2lf\n",OPND.top()); OPND.pop(); getchar(); } return 0; }