- 题目描述:
-
读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
- 输入:
-
测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。
- 输出:
-
对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。
- 样例输入:
-
1 + 2 4 + 2 * 5 - 7 / 11 0
- 样例输出:
-
3.00 13.36
Solution1:
#include<stdio.h> #define Max 200 int main(){ double stack[Max]; int top,i,n; double d,num,count; char symbol,space; while(scanf("%d ",&n)!=EOF&&n){ top=0; stack[++top]=1.0*n; while(scanf("%c%lf%c",&symbol,&num,&space)!=EOF){ if(symbol ==‘+‘){ stack[++top]=num; }else if(symbol==‘-‘){ stack[++top]=-1*num; }else if(symbol==‘*‘){ stack[top]=stack[top]*num; }else if(symbol==‘/‘){ stack[top]=stack[top]/num; } if(space!=‘ ‘){ break; } } count=0; for(i=1;i<=top;i++) count+=stack[i]; printf("%.2lf\n",count); } return 0; }
Solution2:
#include<stack> #include<stdio.h> using namespace std; char str[220]; int mat[][5]={ 1,0,0,0,0, 1,0,0,0,0, 1,0,0,0,0, 1,1,1,0,0, 1,1,1,0,0 }; stack<int> op; stack<double> in; void getop(bool &reto,int &retn,int &i){ if(i==0 && op.empty()==true){ reto=true; retn=0; return; } if(str[i]==0){ reto=true; retn=0; return; } if(str[i]>=‘0‘ && str[i]<=‘9‘){ reto=false; } else{ reto=true; if(str[i]==‘+‘){ retn=1; } else if(str[i]==‘-‘){ retn=2; } else if(str[i]==‘*‘){ retn=3; } else if(str[i]==‘/‘){ retn=4; } i+=2; return; } retn=0; for(;str[i]!=‘ ‘ && str[i]!=0;i++){ retn*=10; retn+=str[i]-‘0‘; } if(str[i]==‘ ‘) i++; return; } int main(){ while(gets(str)){ if(str[0]==‘0‘ && str[1]==‘0‘) break; bool retop; int retnum; int idx=0; while(!op.empty()) op.pop(); while(!in.empty()) in.pop(); while(true){ getop(retop,retnum,idx); if(retop==false){ in.push((double)retnum); } else{ double temp; if(op.empty()==true || mat[retnum][op.top()]==1){ op.push(retnum); } else{ while(mat[retnum][op.top()]==0){ int ret=op.top(); op.pop(); double b=in.top(); in.pop(); double a=in.top(); in.pop(); if(ret==1) temp=a+b; else if(ret==2) temp=a-b; else if(ret==3) temp=a*b; else temp=a/b; in.push(temp); } op.push(retnum); } } if(op.size()==2 && op.top()==0) break; } printf("%.2f\n",in.top()); } return 0; }
原文地址:https://www.cnblogs.com/bernieloveslife/p/9736637.html
时间: 2024-10-03 22:29:32