#include<stdio.h> #include<string.h> #define MAX 1000000+10 #define Min(a,b) a<b?a:b char s[MAX]; int stack[MAX]; int n; char operater(int ch,int s,int e){ int sum=stack[s]-'0'; for(int i=s+1;i<e;i++){ switch(ch){ case '+'-'0': sum+=stack[i]; break; case '-'-'0': sum-=stack[i]; break; case '*'-'0': sum*=stack[i]; break; case '/'-'0': sum/=stack[i]; break; } } return sum; } int out(int e){ int i=e-1; while(1){ if(stack[i]=='('-'0')break; i--; } stack[i]=operater(stack[i+1],i+2,e); return i; } void work(){ int i=0,flag=0; char ch; for(int j=0;j<n;j++){ if(s[j]!=' '){ if(s[j]=='(')stack[i++]=s[j]-'0'; else if(s[j]==')')stack[i++]=s[j]-'0'; else stack[i++]=s[j]-'0'; } if(stack[i]==')'-'0')i=out(i); } printf("%d\n",stack[0]); return ; } int main(){ while(gets(s)!=NULL){ n=strlen(s); work(); } return 0; } |
Double click to view unformatted code.