HDOJ 1237 简单计算器(堆栈)

来源:互联网 发布:淘宝怎么改默认地址 编辑:程序博客网 时间:2024/05/22 01:36

简单计算器

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 14833    Accepted Submission(s): 5050


Problem Description
读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
 

Input
测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。
 

Output
对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。
 

Sample Input
1 + 24 + 2 * 5 - 7 / 110
 

Sample Output
3.0013.36
 

 

只用堆栈即可,c代码如下:

 

#include<cstdio>#include<cstring>double a[210];int main(){int i,sign,count,j;double sum;char c;while(1){sign=1;i=0;memset(a,0,sizeof(a));scanf("%lf",&a[0]);while(getchar()!='\n'){sign=0;scanf("%c %d",&c,&count);if(c=='+')  a[++i]=count;else if(c=='-')  a[++i]=-count;else if(c=='*')  a[i]=a[i]*count;else if(c=='/')  a[i]=a[i]/(count*(1.0));}if(sign)  break;sum=0;for(j=0;j<=i;j++)  sum+=a[j];printf("%0.2lf\n",sum);}return 0;}


 

c++ STL——stack解法:


#include<cstdio>#include<stack>using namespace std;int main(){int i,sign,j;double sum,num;char c;while(1){sign=1;stack<double>count;scanf("%lf",&num);count.push(num);while(getchar()!='\n'){sign=0;scanf("%c %lf",&c,&num);if(c=='+')   count.push(num);else if(c=='-')   count.push(-num);else if(c=='*'){double x=count.top();x=x*num;count.pop();count.push(x);}else{double x=count.top();x=x/num;count.pop();count.push(x);}}if(sign)   break;sum=0;while(!count.empty()){sum+=count.top();count.pop();}printf("%.2lf\n",sum);}return 0;} 


0 0
原创粉丝点击