rt,拜谢
#include <bits/stdc++.h>
using namespace std;
const int N = 35;
typedef long long ll;
int n;
char s[N];
ll qpow(ll a, ll q) {
ll ans = 1;
for (; q; q >>= 1) {
if (q & 1) ans = ans * a;
a = a * a;
}
return ans;
}
ll solve(int l, int r) {
if (l > r) return 0;
int cnt = 0;
for (int i = r; i >= l; i--) {
if (s[i] == '(') cnt++;
else if (s[i] == ')') cnt--;
else if (cnt == 0 && (s[i] == '+' || s[i] == '-')) {
ll x = solve(l, i - 1), y = solve(i + 1, r);
return (s[i] == '+' ? x + y : x - y);
}
}
cnt = 0;
for (int i = r; i >= l; i--) {
if (s[i] == '(') cnt++;
else if (s[i] == ')') cnt--;
else if (cnt == 0 && (s[i] == '*' || s[i] == '/')) {
ll x = solve(l, i - 1), y = solve(i + 1, r);
return (s[i] == '*' ? x * y : x / y);
}
}
cnt = 0;
for (int i = r; i >= l; i--) {
if (s[i] == '(') cnt++;
else if (s[i] == ')') cnt--;
else if (cnt == 0 && s[i] == '^')
return qpow(solve(l, i - 1), solve(i + 1, r));
}
if (s[l] == '(' && s[r] == ')') return solve(l + 1, r - 1);
ll num = 0;
for (int i = l; i <= r; i++) num = num * 10 + s[i] - '0';
return num;
}
int main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cin >> (s + 1), n = strlen(s + 1);
cout << solve(1, n) << '\n';
return 0;
}