简单计算器 (栈)

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<stack>
using namespace std;
int main()
{
    stack<double> num;
    double n,t;
    char f;
    while (cin >> n)
    {
        if (getchar() =='
' && n == 0) break;
        double sum=0;
        num.push(n);
        while (cin >> f >> n)
        {
            if (f == '+')
                num.push(n);
            if (f == '-')
                num.push(-n);
            if (f == '*')
            {
                t = n * num.top();
                num.pop();
                num.push(t);
            }
            if (f == '/')
            {
                t = num.top() / n;
                num.pop();
                num.push(t);
            }
            if (getchar() == '
') break;
        }
        while (!num.empty())
        {
            sum += num.top();
            num.pop();
        }
        printf("%.2lf
", sum);
    }
}

  

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<stack>
using namespace std;
int main()
{
	double num[205], n;
	char f;
	while (cin >> n)
	{
		int sum = 0;
		num[0] = n;
		if (getchar() == '
'&&n == 0)break;
		while (1)
		{
			cin >> f >> n;
			if (f == '*')num[sum] *= n;
			else if (f == '/')num[sum] /= n;
			else if (f == '+')num[++sum] = n;
			else num[++sum] = -n;
			if (getchar() == '
')break;
		}
		n = 0;
		for (int i = 0; i <= sum; i++)
			n += num[i];
		printf("%.2lf
", n);
	}
	return 0;
}

  

读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
Input测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。
Output对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。 

Sample Input

1 + 2
4 + 2 * 5 - 7 / 11
0

Sample Output

3.00
13.36
原文地址:https://www.cnblogs.com/edych/p/7207795.html