读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
1 + 2 4 + 2 * 5 - 7 / 11 0
3.00 13.36
#include <cstdio>
#include <iostream>
#include <string>
#include <sstream>
#include <cstring>
#include <stack>
#include <queue>
#include <algorithm>
#include <cmath>
#include <map>
using namespace std;
int main()
{
string s;
int flag;
while(getline(cin,s))
{
if(s.size()==1)break;
flag = 1;
stringstream stream(s);
double num;
char op = ' ';
stack<char> sop;
stack<double> snum;
while(1)
{
if(flag)
{
stream >> num;
if(op =='*'||op == '/')
{
double num1 = snum.top();
snum.pop();
if(op=='*')
num1 = num * num1;
else
num1 = num1 / num;
snum.push(num1);
}
else
snum.push(num);
flag=0;
}
else
{
if(stream>>op);
else break;
if(op=='+'||op=='-')
{
double num1,num2;
char c;
if(!sop.empty())
{
c=sop.top(),sop.pop();
num2=snum.top(),snum.pop();
num1=snum.top(),snum.pop();
if(c=='+')num1+=num2;
else num1-=num2;
snum.push(num1);
}
sop.push(op);
}
flag=1;
}
}
while(!sop.empty())
{
op=sop.top(),sop.pop();
double num1,num2;
num2=snum.top(),snum.pop();
num1=snum.top(),snum.pop();
if(op=='+')
num1+=num2;
else
num1-=num2;
snum.push(num1);
}
printf("%.2lf\n",snum.top());
}
return 0;
}
#include<iostream>
#include<stack>
#include<cstring>
#include<cstdio>
#include<sstream>
#include<iomanip>
#include<string>
using namespace std;
int main()
{
char op;
double num,temp;
while(scanf("%lf",&num))
{
stack<double> sum;
op = getchar();
if(num == 0 && op == '\n')break;
sum.push(num);
while(1)
{
scanf("%c %lf", &op, &num);
switch (op)
{
case '+':
sum.push(num);
break;
case '-':
sum.push(-num);
break;
case '*':
temp = sum.top();
sum.pop();
sum.push(temp*num);
break;
case '/':
temp = sum.top();
sum.pop();
sum.push(temp/num);
break;
}
if(getchar() == '\n')break;
}
double ans = 0;
while(!sum.empty())
{
ans += sum.top();
sum.pop();
}
printf("%.2lf\n",ans);
}
}