class Solution {
public:
int solve(string s) {
int n = s.size();
stack<int> a;
stack<char> b;
for (int i = 0; i < n; i++) {
if (isdigit(s[i])) {
int c = 0;
while (i < n && isdigit(s[i])) {
c = c * 10 + (s[i] - '0');
i++;
}
i--;
a.push(c);
} else {
if (b.empty()) {
b.push(s[i]);
} else {
if (s[i] == '+' || s[i] == '-') {
if (b.top() == '+') {
int d = a.top();
a.pop();
int e = a.top();
a.pop();
b.pop();
a.push(e + d);
b.push(s[i]);
} else if (b.top() == '-') {
int d = a.top();
a.pop();
int e = a.top();
a.pop();
b.pop();
a.push(e - d);
b.push(s[i]);
} else if (b.top() == '*') {
int d = a.top();
a.pop();
int e = a.top();
a.pop();
b.pop();
a.push(e * d);
b.push(s[i]);
} else if (b.top() == '(') {
b.push(s[i]);
}
}
if (s[i] == '*') {
if (!b.empty() && b.top() == '*') {
int d = a.top();
a.pop();
int e = a.top();
a.pop();
b.pop();
a.push(e * d);
b.push(s[i]);
} else {
b.push(s[i]);
}
}
if (s[i] == '(') {
b.push(s[i]);
}
if (s[i] == ')') {
// 关键修改:循环计算直到遇到 '('
while (!b.empty() && b.top() != '(') {
char op = b.top();
b.pop();
int d = a.top();
a.pop();
int e = a.top();
a.pop();
if (op == '+') a.push(e + d);
else if (op == '-') a.push(e - d);
else if (op == '*') a.push(e * d);
}
// 弹出 '('
if (!b.empty() && b.top() == '(') {
b.pop();
}
}
}
}
}
// 计算剩余运算符
while (!b.empty()) {
char op = b.top();
b.pop();
int d = a.top();
a.pop();
int e = a.top();
a.pop();
if (op == '+') a.push(e + d);
else if (op == '-') a.push(e - d);
else if (op == '*') a.push(e * d);
}
return a.top();
}
};

京公网安备 11010502036488号