nyoj305 表达式求值

 1 #include<stdio.h>

 2 char s[301],cstack[120];

 3 int dstack[80];

 4 int i,ctop,dtop;

 5 int Operate(int a,char theta,int b)

 6 {

 7     switch(theta){

 8         case 'd': return a+b;

 9         case 'n': return a>b?b:a;

10         case 'x': return a>b?a:b;

11     }

12 }

13 int EvaluateExpression()

14 {

15     char theta;

16     int a,b,k;

17     do{    

18         if(s[i]>'9'||s[i]<'0'){

19             if(s[i]=='a'||s[i]=='m') i+=2;

20             if(s[i]==')'){

21                 --ctop;

22                 theta=cstack[--ctop];

23                 a=dstack[--dtop];

24                 b=dstack[--dtop];

25                 dstack[dtop++]=Operate(a,theta,b);

26             }else if(s[i]!=',') cstack[ctop++]=s[i];

27             ++i;

28         }

29         while(s[i]<='9'&&s[i]>='0'){

30             for(k=0;s[i]!=','&&s[i]!=')'&&s[i]<='9'&&s[i]>='0';++i)

31                 k=10*k+s[i]-'0';

32             dstack[dtop++]=k;

33             if(s[i]==',') ++i;

34         }

35     }while(ctop);

36     return dstack[0];

37 }

38 int main()

39 {

40     int N;

41     scanf("%d",&N);

42     while(N--){

43         i=ctop=dtop=0;

44         scanf("%s",s);

45         printf("%d\n",EvaluateExpression());

46     }

47     return 0;

48 }

49         

50         

纠结了半天,还好最终AC了,但是还有一点不明白,就是30行的限制数字的那个条件,我感觉不要也行,但提交总是WA,加上之后就AC了,为什么啊?求大神指点!!!

你可能感兴趣的:(表达式)