本文主要是介绍hdoj 1237 简单计算器(栈),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
http://acm.hdu.edu.cn/showproblem.php?pid=1237
简单计算器
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 12665 Accepted Submission(s): 4157
1 + 2 4 + 2 * 5 - 7 / 11 0
3.00 13.36
这题有思路,但感觉自己的想法太复杂,下边是看了大牛写的程序然后自己按着思路写的。
开始读入数字b,然后用getchar()接收下一个,如果是回车且开始读入的数字是0就跳出,如果不是就执行top=0,a[top++]=b,然后进入下有个while语句,以后的输入就是输入一个运算符号,输入一个数字,如果运算符号是'*',就把
这个数字与前一个数字求积,然后a[top-1]*=b;如果运算符号是'/',就把这个数字与前一个数字做除法,当前数字是除数,a[top-1]/=b;如果运算符号是'+',把这个数字放到栈a中就行了,即a[top++]=b;如果运算符号是'-',把数字取负再放到栈中就行了,即a[top++]=-b;
#include<stdio.h>
#include<string.h>
int main()
{double a[1000],b,sum;int top,i,j,k;char c;while(scanf("%lf",&b)){c=getchar();//用getchar()接收空格和换行符 if(b==0&&c=='\n') break;//如果同时为0和换行符,就跳出 else{//否则就把数字存放到数组中 top=0;memset(a,0,sizeof(a));a[top++]=b;}while(1){scanf("%c %lf",&c,&b);if(c=='*')a[top-1]*=b;else if(c=='/')a[top-1]/=b;else if(c=='+')a[top++]=b;else if(c=='-')a[top++]=-b;if(getchar()=='\n') break;//如果接收的是换行符,那么就退出 }for(i=0,sum=0;i<top;i++)sum+=a[i]; printf("%.2lf\n",sum);}return 0;
}
通过这题要学到点东西:
(1):知道getchar()可以接收空格和换行符。
(2):要善于用数据结构解决问题。
这篇关于hdoj 1237 简单计算器(栈)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!