HDU 1237 简单计算器 (栈)

来源:互联网 发布:mui框架 js自动加载 编辑:程序博客网 时间:2024/06/04 20:04

简单计算器

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


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

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

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

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

Sample Output
3.0013.36
 

Source
浙大计算机研究生复试上机考试-2006年
 

Recommend
JGShining   |   We have carefully selected several similar problems for you:  1230 1235 1234 1229 1231 
 

刚开始用的字符栈,太麻烦了,写的我自己都乱了,我也是醉了,切记以后遇到字符 ,数字相互转换时,一定要想先想好谁转换为谁更简单,要不然。。。。。。。

#include<stdio.h>#include<stack>#include<string.h>#include<algorithm>using namespace std;int main(){char ch,c;double a,b,d;while(scanf("%lf",&a)!=EOF){c=getchar();if(a==0&&c=='\n')break;stack<double>s;s.push(a);scanf("%c",&ch);while(scanf("%lf",&a)!=EOF){if(ch=='*'){b=s.top();s.pop();b=b*a;s.push(b);}else if(ch=='/'){b=s.top();s.pop();b=b/a;s.push(b);}else if(ch=='+')s.push(a);else if(ch=='-')s.push(0-a);c=getchar();if(c=='\n')break;scanf("%c",&ch);}double sum=0;while(!s.empty()){sum+=s.top();s.pop();}printf("%.2lf\n",sum);}return 0;}


0 0