读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
Input
测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。
Output
对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。
Sample Input
1 + 2
4 + 2 * 5 - 7 / 11
0
Sample Output
3.00
13.36
坑:可以试试样例 0 + 1 1 + 0 10 / 5 / 2
#include<iostream>
#include<stack>
using namespace std;
int main(){
while(1){
double num;
char op;
stack<double> n;
scanf("%lf%c",&num,&op);
if(num==0 && op=='\n') break;
n.push(num);
while(1){
scanf("%c",&op);
if(op=='\n')
break;
else if(op==' ')
scanf("%c",&op);
scanf("%lf",&num);
if(op == '+'){
n.push(num);
}else if(op == '-'){
n.push(-num);
}else if(op== '*'){
double tmp = n.top();
n.pop();
n.push(tmp*num);
}else if(op=='/'){
double tmp = n.top();
n.pop();
n.push(tmp/num);
}
}
double sum = 0;
while(!n.empty()){
sum += n.top();
n.pop();
}
printf("%.2lf\n",sum);
}
return 0;
}