1 条题解
-
0
C :
#include<stdio.h> #include<math.h> #define maxn 101 int push1(int n,double *p,double v) { n++; p[n]=v; return n; } double pop1(int n,double *p) { return p[n]; } int push2(int n,char *p,char v) { n++; p[n]=v; return n; } int main() { char str[maxn],stackope[maxn],op; int nn=0,np=0,i; double stacknum[maxn],sec,fir; scanf("%s",str); for(i=0;str[i]!='@';i++) { if(str[i]>='0'&&str[i]<='9') nn=push1(nn,stacknum,(str[i]-'0')*1.00); else { if(np==0) np=push2(np,stackope,str[i]); else if(str[i]=='(') np=push2(np,stackope,str[i]); else if(str[i]==stackope[np]) { sec=pop1(nn,stacknum);nn--; fir=pop1(nn,stacknum);nn--; if(str[i]=='+') { nn=push1(nn,stacknum,fir+sec);} if(str[i]=='-') { nn=push1(nn,stacknum,fir-sec);} if(str[i]=='*') { nn=push1(nn,stacknum,fir*sec);} if(str[i]=='/') { nn=push1(nn,stacknum,fir/sec);} } else if(str[i]=='+') { if(stackope[np]=='*') { sec=pop1(nn,stacknum);nn--; fir=pop1(nn,stacknum);nn--; nn=push1(nn,stacknum,fir*sec);np--; np=push2(np,stackope,str[i]); } else if(stackope[np]=='/') { sec=pop1(nn,stacknum);nn--; fir=pop1(nn,stacknum);nn--; nn=push1(nn,stacknum,fir/sec);np--; np=push2(np,stackope,str[i]); } else if(stackope[np]=='-') { sec=pop1(nn,stacknum);nn--; fir=pop1(nn,stacknum);nn--; nn=push1(nn,stacknum,fir-sec);np--; np=push2(np,stackope,str[i]); } else np=push2(np,stackope,str[i]); } else if(str[i]=='-') { if(stackope[np]=='*') { sec=pop1(nn,stacknum);nn--; fir=pop1(nn,stacknum);nn--; nn=push1(nn,stacknum,fir*sec);np--; np=push2(np,stackope,str[i]); } else if(stackope[np]=='/') { sec=pop1(nn,stacknum);nn--; fir=pop1(nn,stacknum);nn--; nn=push1(nn,stacknum,fir/sec);np--; np=push2(np,stackope,str[i]); } else if(stackope[np]=='+') { sec=pop1(nn,stacknum);nn--; fir=pop1(nn,stacknum);nn--; nn=push1(nn,stacknum,fir+sec);np--; np=push2(np,stackope,str[i]); } else np=push2(np,stackope,str[i]); } else if(str[i]=='*'||str[i]=='/') { if(stackope[np]=='*') { sec=pop1(nn,stacknum);nn--; fir=pop1(nn,stacknum);nn--; nn=push1(nn,stacknum,fir*sec);np--; np=push2(np,stackope,str[i]); } else if(stackope[np]=='/') { sec=pop1(nn,stacknum);nn--; fir=pop1(nn,stacknum);nn--; nn=push1(nn,stacknum,fir/sec);np--; np=push2(np,stackope,str[i]); } else np=push2(np,stackope,str[i]); } else if(str[i]=='^') { sec=pop1(nn,stacknum);nn--; nn=push1(nn,stacknum,pow(sec,(str[i+1]-'0'))); i=i+1; continue; } else { while(stackope[np]!='(') { sec=pop1(nn,stacknum);nn--; fir=pop1(nn,stacknum);nn--; op=stackope[np]; if(op=='+') nn=push1(nn,stacknum,fir+sec); if(op=='-') nn=push1(nn,stacknum,fir-sec); if(op=='*') nn=push1(nn,stacknum,fir*sec); if(op=='/') nn=push1(nn,stacknum,fir/sec); np--; } np--; } } } while(np!=0) { sec=pop1(nn,stacknum);nn--; fir=pop1(nn,stacknum);nn--; op=stackope[np]; if(op=='+') nn=push1(nn,stacknum,fir+sec); if(op=='-') nn=push1(nn,stacknum,fir-sec); if(op=='*') nn=push1(nn,stacknum,fir*sec); if(op=='/') nn=push1(nn,stacknum,fir/sec); np--; } printf("%d",(int)stacknum[nn]); return 0; }
- 1
信息
- ID
- 406
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者