题解 | #表达式求值#
表达式求值
https://www.nowcoder.com/practice/9566499a2e1546c0a257e885dfdbf30d
// HJ54-2 表达式求值.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 #include<iostream> #include<bits/stdc++.h> using namespace std; int ComputerNum(string& s, int left, int right) { char op = '+'; vector<int>dp; int num = 0; int len = s.size(); for (int i = left; i <=right; i++) { if (isdigit(s[i])) { num = num * 10 + s[i] - '0'; } if (s[i] == '(') { int layer = 0; int j = i; while (j <=right) { if (s[j] == '(') { layer++; } else if (s[j] == ')') { layer--; if (layer == 0) { break; } } j++; } num = ComputerNum(s, i + 1, j - 1); i = j + 1; } if (!isdigit(s[i])||i==right) { switch (op) { case '+':dp.push_back(+num); break; case '-':dp.push_back(-num); break; case '*':dp.back() *= num; break; case '/':dp.back() /= num; break; } op = s[i]; num = 0; } } int res = 0; for (auto c : dp) { res += c; } return res; } int main() { string s; while (cin >> s) { int len = s.size(); cout << ComputerNum(s, 0, len-1)<<endl; } return 0; }