题目大意:读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值
思路:首先创建一个栈,将第一个数字压入栈,之后如果遇到‘+’,就将下一个数字压入栈,如果遇到‘-’,就将下一个数字取负再压入栈,如果遇到‘*’,就将栈顶元素乘以下一个数字,如果遇到‘/’,就将栈顶元素除以下一个数字,最后再取出栈内所有元素进行累加得到答案
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <stack>
using namespace std;
int main()
{
stack<double> st;
double num1;
char ch;
while (scanf("%lf", &num1) != EOF)
{
ch = getchar();
if (num1 == 0 && ch != ' ')
{//判断输入是否结束
break;
}
st.push(num1);//将第一个元素入栈
double num;
char exp, space;
while (scanf("%c %lf%c", &exp, &num, &space) != EOF)
{
switch (exp)
{
case '+':
st.push(num);//遇到‘+’,将下一个元素入栈
break;
case '-':
st.push(-1 * num);//遇到‘-’,将下一个元素取负入栈
break;
case '*':
st.top() *= num;//遇到‘*’,将栈顶元素乘以下一个数
break;
case '/':
st.top() /= num;//遇到‘/’,将栈顶元素除以下一个数
break;
}
if (space != ' ')
{//一个句子的结束
break;
}
}
double sum;
sum = 0;
while (!st.empty())
{
sum += st.top();//将所有栈内元素累加
st.pop();
}
printf("%.2f\n", sum);
}
return 0;
}