九度1019
- 题目描述:
- 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
- 输入:
- 测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。
- 输出:
- 对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。
- 利用堆栈的思想,遇到+、—入栈,遇到*、/则更新栈尾,最后从前向后递加输出结果
- 代码如下:
#include<stdio.h> #define MAX 1000 double stack[MAX]; int main() { int a,tail; while(scanf("%d",&a)!=EOF) { int i; char c,c1,c2; double ans=0; tail=0; c=getchar(); if(a==0&&c!=' ') break; stack[tail++]=1.0*a; while(scanf("%c %d%c",&c1,&a,&c2)!=EOF) { if(c1=='+') stack[tail++]=1.0*a; else if(c1=='-') stack[tail++]=-1.0*a; else if(c1=='*') stack[tail-1]*=a; else if(c1=='/') stack[tail-1]/=(double)a; if(c2!=' ') break; } for(i=0;i<tail;i++) ans+=stack[i]; printf("%.2lf\n",ans); } return 0; }