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


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

       题目描述:                                                                                    
        读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。 
    输入:
        测试输入包含若干测试用例,每个测试用例占一行,每行不超过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 }
  • 相关阅读:
    【InfoPath2007】The form has been closed
    深入浅出Nintex——调用子流程
    深入浅出Nintex——使用查询XML动作
    深入浅出Nintex——使用Call WebService来查询Item ID
    深入浅出Nintex——获得某群组的用户集合
    深入浅出SharePoint2007——Webpart开发
    深入浅出Nintex——获得指定用户的角色
    深入浅出Nintex——使用构建动态字符串动作
    Lucene.net 实现全文搜索
    DotLucene源码浅读笔记(1)补遗:编写简单中文分词器ChineseAnalyzer
  • 原文地址:https://www.cnblogs.com/VortexPiggy/p/2490174.html
Copyright © 2020-2023  润新知