暑假集训(1)第六弹 -----简单计算器(Hdoj1237)

Description

读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
 

Input

测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。
 

Output

对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。
 

Sample Input

1 + 2 4 + 2 * 5 - 7 / 11 0
 

Sample Output

3.00 13.36
 
 
问题分析:难点主要是要实现乘除法的优先级;可以用一个数组,如果是加号后的数将它存入数组的下一位,减号则将它的相反数存入下一位,如果是乘除,则直接与本位数运算,最后把数组内的数相加得到答案。
 1 #include "cstdio"
 2 void mset(double a[])
 3 {
 4    for (int i=0;i<405;i++)
 5       a[i] = 0;
 6 }
 7 int main()
 8 {
 9    double a[405];
10    double sum;
11    int flag,i;
12    int m;
13    char c;
14    while (1)
15    {
16       mset(a);
17       i=0;
18       flag=0;
19       scanf ("%lf",&a[0]);
20       while (getchar() != '
')
21       {
22           sum=0;
23           flag =1;
24           scanf ("%c %d",&c,&m);
25           switch (c)
26           {
27             case '+' : a[++i] = m;  break;
28             case '-' : a[++i] = -m; break;
29             case '*' : a[i] = a[i]*m; break;
30             case '/' : a[i] = a[i]/m * 1.0; break;
31           }
32       }
33       if (!flag)
34              break;
35       for (int j=0;j<=i+1;j++)
36            sum+=a[j];
37       printf ("%.2lf
",sum);
38    }
39     return 0;
40 }
View Code
原文地址:https://www.cnblogs.com/huas-zlw/p/5676936.html