HDOJ 1237 简单计算器(堆栈)
2015-07-27 23:42
302 查看
简单计算器
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 + 2 4 + 2 * 5 - 7 / 11 0
Sample Output
3.00 13.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; }
相关文章推荐
- ViewDragHelper的用法
- PostgreSQL和MYsql的对比
- oozie 学习笔记 action
- ASP.NET MVC中如何以ajax的方式在View和Action中传递数据
- php专家的博客
- 多系统启动出现grub rescue模式,错误“normal.mod not found”解决办法
- android studio 加载第三方类库
- 数据抽象、面向对象程序设计基本概念
- 封装linux 条件互斥锁
- 《秋声》——朱熹
- float -- 自适应 demo
- MySQL之服务器性能剖析
- JS引用另外JS文件的顺序问题。
- hdu 5297 - Y sequence( 2015 Multi-University Training Contest 1)容斥原理
- 在页面中出现乱码的解决方案
- 线程(2) ---volatile
- 快速排序
- NameNode HA(翻译)
- PermMissingElem
- 【上海交大oj】数学题3(数位dp)