简单计算器

读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。

Input

测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。

Output

对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。

Sample Input

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

Sample Output

3.00
13.36

emmm题目就这样, 其实一开始我也不会写stack考虑怎么用递归去写的

思路就是先计算+和—, 因为他们的优先级比较低, 需要先进性加减乘除运算, 我们写递归是倒着进去的, 所以由优先级高的要放到后边处理

#include <algorithm>
#include <cstring>
#include <iostream>
#include <stack>
#include <string>
#include <vector>

using namespace std;
string op;

int getnum(int l, int r) {
    double num = 0;
    
    if (l >= r)
        return 0;
    else {
        for (int i = r - 1; i >= l; i--) {
            if (op[i] == '+') {
                return getnum(l, i) + getnum(i + 1, r);
            } else if (op[i] == '-') {
                return getnum(l, i) - getnum(i + 1, r);
            }
        }

        for (int i = r - 1; i >= l; i--) {
            if (op[i] == '*') {
                return getnum(l, i) * getnum(i + 1, r);
            } else if (op[i] == '/') {
                return getnum(l, i) / getnum(i + 1, r);
            }
        }

        for (int i = l; i <= r - 1; i++) {
            if (op[i] >= '0' && op[i] <= '9') {
                num = num * 10.0 + op[i] - '0';
            }
        }
    }
    return num;
}
int main() {
    while (getline(cin, op)) {
        if (op.size() == 1)
            return 0;
        else
            cout << getnum(0, op.size()) << endl;
    }

    return 0;
}

今天写了一天h5和css, 内心感受还是算法好玩哈哈哈