Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
119039 梁颢城 后序表达式 C++ 内存超限 0 1151 MS 131108 KB 2884 2024-01-03 13:45:17

Tests(0/10):


#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; }


测评信息: