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

时间:2023-03-09 02:02:08
暑假集训(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
问题分析:难点主要是要实现乘除法的优先级;可以用一个数组,如果是加号后的数将它存入数组的下一位,减号则将它的相反数存入下一位,如果是乘除,则直接与本位数运算,最后把数组内的数相加得到答案。
 #include "cstdio"
void mset(double a[])
{
for (int i=;i<;i++)
a[i] = ;
}
int main()
{
double a[];
double sum;
int flag,i;
int m;
char c;
while ()
{
mset(a);
i=;
flag=;
scanf ("%lf",&a[]);
while (getchar() != '\n')
{
sum=;
flag =;
scanf ("%c %d",&c,&m);
switch (c)
{
case '+' : a[++i] = m; break;
case '-' : a[++i] = -m; break;
case '*' : a[i] = a[i]*m; break;
case '/' : a[i] = a[i]/m * 1.0; break;
}
}
if (!flag)
break;
for (int j=;j<=i+;j++)
sum+=a[j];
printf ("%.2lf\n",sum);
}
return ;
}