- 题目大意
给出一个四则运算计算式,然后来求值。
- 解题思路
根据符号来利用栈将数变换成对应的形式,比如如果是’+’的话,便将后面的那个数字压入栈中,’-‘号的话,将后面的数字取反压入栈中,而如果遇到乘法或除法,则将栈顶取出与符号后面的数字计算后压入栈中,这样最后在栈中的数字全部相加即是表达式的值了。
- 代码
#include<iostream>
#include<stack>
#include<iomanip>
using namespace std;
int main()
{
double a, b,temp;
double s = 0.00;
char c;
stack<double>sum;
while (cin >> a)
{
c = getchar();
if (c == '\n'&&a == 0)
break;
sum.push(a);
while (cin>>c>> b)
{
if (c == '*')
{
temp = sum.top();
sum.pop();
sum.push(temp * b);
}
else if (c == '/')
{
temp = sum.top();
sum.pop();
sum.push(temp / b);
}
else if (c == '+')
{
sum.push(b);
}
else if(c == '-')
{
sum.push(-b);
}
if (getchar() == '\n')
break;
}
while (!sum.empty())
{
s += sum.top();
sum.pop();
}
cout << setprecision(2) << std::fixed << s << endl;
s = 0;
}
return 0;
}