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

四则运算表达式计算
本文介绍了一种解决含乘除优先级的四则运算表达式计算方法,通过使用数组来辅助存储中间结果,实现对输入表达式的正确解析与计算,并提供了一个具体的C语言实现示例。

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() != '\n')
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\n",sum);
38    }
39     return 0;
40 }
View Code

 

转载于:https://www.cnblogs.com/huas-zlw/p/5676936.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值