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 }
时间: 2024-12-25 14:46:12