题目1019:简单计算器
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:6346
解决:2334
- 题目描述:
- 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
- 输入:
- 测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。
- 输出:
- 对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。
- 样例输入:
-
1 + 2 4 + 2 * 5 - 7 / 11 0
- 样例输出:
-
3.00 13.36
- 来源:
- 2006年浙江大学计算机及软件工程研究生机试真题
1 #include <stdio.h> 2 #include <cstring> 3 #include <queue> 4 #include <iostream> 5 using namespace std; 6 double stack[110]; 7 int main(){ 8 //freopen("D:\\INPUT.txt","r",stdin); 9 int tail; 10 double num; 11 while(cin>>num&&num!=0){ 12 //cout<<num<<endl; 13 tail=0; 14 memset(stack,0,sizeof(stack)); 15 stack[tail++]=num; 16 //cout<<stack[tail-1]<<endl; 17 char c1,cal; 18 //cout<<"1"<<endl; 19 while(scanf("%c",&c1)){ 20 //cout<<c1<<endl; 21 if(c1=='\n'){ 22 //cout<<1<<endl; 23 break; 24 } 25 //cout<<2<<endl; 26 scanf("%c %lf",&cal,&num); 27 //cout<<num<<endl; 28 //cout<<cal<<endl; 29 switch(cal){ 30 case '+':{ 31 stack[tail++]=num; 32 //cout<<stack[tail-1]<<endl; 33 break; 34 } 35 case '-':{ 36 stack[tail++]=-num; 37 //cout<<stack[tail-1]<<endl; 38 break; 39 } 40 case '*':{ 41 tail--; 42 stack[tail]=stack[tail]*num; 43 tail++; 44 //cout<<stack[tail]<<endl; 45 break; 46 } 47 case '/':{ 48 tail--; 49 stack[tail]=stack[tail]/num; 50 tail++; 51 //cout<<stack[tail]<<endl; 52 break; 53 } 54 } 55 } 56 int i; 57 double sum=0; 58 for(i=0;i<tail;i++){ 59 sum+=stack[i]; 60 //cout<<stack[i]<<endl; 61 } 62 printf("%.2lf\n",sum); 63 } 64 return 0; 65 }