题解 | #表达式求值#
表达式求值
https://www.nowcoder.com/practice/9566499a2e1546c0a257e885dfdbf30d
/* 根据题意实现, 主要是如何处理遇到数字字符和运算符字符 遇到多个运算符的话用栈存储前一个运算符的结果给其他运算符用 需要左括号的话使用递归,遇到右括号就结束递归 遇到数字需要处理不止一个,要让算法可以处理一个或多个数字 每次处理运算符的时候的出的结果都在堆栈stack里,累加起来就是结果 */ #include <iostream> #include <stack> using namespace std; int p; int compute(string& data) { int num = 0; int l = data.size(); char op = '+'; stack<int> st; while (p < l) { if (data[p] == '(') { p++; num = compute(data); } while (p < l && isdigit(data[p])) { num = num * 10 + data[p] - '0'; p++; } switch (op) { case '+' : st.push(num); break; case '-': st.push(-num); break; case '*': { int t = st.top(); t *= num; st.pop(); st.push(t); break; } case '/': { int t = st.top(); t /= num; st.pop(); st.push(t); break; } } num = 0; op = data[p]; if (data[p] == ')') { p++; break; } p++; } int sum = 0; while (st.size()) { sum += st.top(); st.pop(); } return sum; } int main() { string data; while (cin >> data) { p = 0; cout << compute(data) << endl; } }