nyoj 305 表达式求值

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=305

这道题用递归写会比较简单点。

View Code
 1 #include <iostream>
2 #include <cmath>
3 #include <cstdio>
4 #include <cstring>
5 using namespace std;
6 char a[500];
7 int start;
8 int sove()
9 {
10 int m,n;
11 switch(a[start])
12 {
13 case 'm':start+=3;if(a[start-2]=='i')return min(sove(),sove());else return max(sove(),sove());
14 case 'a':start+=3;return sove()+sove();
15 case '(':
16 case ')':
17 case ',':start++;return sove();
18 default:sscanf(a+start,"%d%n",&m,&n);start+=n;return m;//在数组中读出整数m,并记录整数的个数。
19 }
20 }
21 int main()
22 {
23 int n;
24 scanf("%d",&n);
25 while(n--)
26 {
27 scanf("%s",a);
28 start=0;
29 printf("%d\n",sove());
30 }
31 return 0;
32 }



posted @ 2012-03-09 08:00  我们一直在努力  阅读(136)  评论(0编辑  收藏  举报