//从后往前算
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
void push_a(double& num);
void pop_a(double& num);
void push_op(char& c);
void pop_op(char& c);
double fun(double a, double b, char c);
char ch[2000];
double a[510];
int top_a;
char op[510];
int top_op;
int main()
{
while(fgets(ch, 2000, stdin))
{
top_a = top_op = 0;
int len = strlen(ch);
for(int i = len-2; i >= 0; i--)
{
if(ch[i] == ' ')
continue;
if(ch[i] >= '0' && ch[i] <= '9')
{
double t;
while((ch[i] != ' ') && i >= 0)
{
i--;
}
i++;
sscanf(&ch[i], "%lf", &t);
push_a(t);
continue;
}
if(ch[i] == '+' || ch[i] == '-' || ch[i] == '*' || ch[i] == '/')
{
double a, b;
pop_a(a);
pop_a(b);
a = fun(a, b, ch[i]);
push_a(a);
}
}
printf("%0.2lf\n", a[0]);
}
}
void push_a(double& num)
{
a[top_a++] = num;
return;
}
void pop_a(double& num)
{
num = a[--top_a];
return;
}
void push_op(char& c)
{
op[top_op++] = c;
return;
}
void pop_op(char& c)
{
c = op[--top_op];
return;
}
double fun(double a, double b, char c)
{
switch(c)
{
case '+': return a + b;
case '-': return a - b;
case '*': return a * b;
case '/': return a / b;
}
}
南阳理工OJ_题目128 前缀式计算
最新推荐文章于 2022-11-27 13:07:51 发布