文件目录

#include <bits/stdc++.h>
using namespace std;
string s, num = "";
stack<int> si;
stack<char> sc;
int a, b;
int js(int a, int b, char c)
{
    switch (c)
    {
    case '+':
        return a + b;
    case '-':
        return a - b;
    case '*':
        return a * b;
    case '/':
        return a / b;
    case '^':
        return round(pow(a, b)); // 四舍五入解决精度问题
    }
    return 0;
}
string yxj = "()+-*/^"; // 0123456 /2 0011223
int main()
{
    cin >> s;
    s += '-'; // 做最后一次运算的处理,实际不参与计算
    for (int i = 0; s[i]; i++)
    {
        if (s[i] >= '0' && s[i] <= '9')
        {
            num += s[i];
        }
        else
        {
            if (num.size() != 0)
            {
                si.push(stoi(num));
                num = "";
            }
            if (s[i] == '(')
                sc.push(s[i]);
            else if (s[i] == ')')
            {
                while (!sc.empty() && sc.top() != '(')
                {
                    b = si.top();
                    si.pop();
                    a = si.top();
                    si.pop();
                    si.push(js(a, b, sc.top()));
                    sc.pop();
                }
                sc.pop(); // 多余做括号出栈
            }
            else
            {
                while (!sc.empty() && sc.top() != '(' && yxj.find(sc.top()) / 2 >= yxj.find(s[i]) / 2)
                {
                    b = si.top();
                    si.pop();
                    a = si.top();
                    si.pop();
                    si.push(js(a, b, sc.top()));
                    sc.pop();
                }
                sc.push(s[i]);
            }
        }
    }
    cout << si.top();
    return 0;
}