简单计算器
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
#include
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()!=' ') { 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 ,sum); } return 0; }
?
c++ STL——stack解法:
?
?
#include
#include
using namespace std; int main() { int i,sign,j; double sum,num; char c; while(1) { sign=1; stack
count; scanf(%lf,&num); count.push(num); while(getchar()!=' ') { 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 ,sum); } return 0; }
?
?