代码改变世界

【慢慢学算法】:简单计数器

2012-05-08 15:24  ATP_  阅读(1715)  评论(4编辑  收藏  举报

  这个题做的人还是比较爽的,挑战了下,没想到自己这个大菜鸟居然搞定了。^_^,而且觉得还是比较简洁明了,跟大家交流分享下.

   题目描述:                                                                                    
    读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。 
输入:
    测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。
输出:
    对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。
样例输入:
1 + 2
4 + 2 * 5 - 7 / 11
0
样例输出:
3.00
13.36
    代码:                                                                                      
 
 1 #include<stdio.h>
 2 int main()
 3 {
 4     double n[200];
 5     while(1)
 6     {
 7     int index = 0;//记录数组的长度
 8     int j, flag = 1;//j用来当作循环计数器,flag就是为了方便退出输入循环
 9     double sum;  //记录结果
10     char c;  //还是为了方便控制输入
11     while(scanf("%lf",&n[index++]))    
12         {
13         c = getchar();      //该c用来读入' ' 同时如果读入的是'\n'就直接退出输入循环
14         if(c != ' ')
15         break;
16         c = getchar();     //用来读入符号
17         if( c == '0')
18         {    
19         flag = 0;
20         break;
21         }
22         n[index++] = (int)c - 60;  //将符号转化为负数记录,方便判断
23         }
24     if( flag == 0 || (index == 1 && n[0] == 0))
25         break;
26         
27     for(j = 1; j < index; j = j + 2)   //遍历数组,先寻找出 '*'(42) '/'(47) 两个符号进行计算
28     {
29        if( n[j] == 42 - 60  )
30        {
31            n[j+1] = n[j-1] * n[j+1];
32            n[j] = -1;   //用-1 来清空不需进行检索的数据,同时,之后的运算不用再考虑左边的数,只需对右边的数进行计算即可
33            n[j-1] = -1;
34        }
35        else if ( n[j] == 47 - 60)
36        {
37            n[j+1] = n[j-1] / n[j+1];
38            n[j] = -1;
39            n[j-1] = -1;
40        }
41     }
42     j = 0;
43     while(n[j] ==  -1)
44         j++;
45     sum = n[j];    //寻找第一个数字对sum进行初始化
46     for(j = 1; j < index; j = j + 2)     //遍历进行 + - 运算
47     {
48         if( n[j] == 43 - 60)
49         {
50         while(n[j+1] == -1)
51             j++;
52         sum += n[j+1];
53         }
54         else if( n[j] == 45 - 60)
55         {
56         while(n[j+1] == -1)
57             j++;
58         sum -= n[j+1];
59         }
60     }
61     printf("%.2f\n",sum);
62         
63     }
64     return 0;
65     
66 }