题解 | #四则运算#
四则运算
https://www.nowcoder.com/practice/9999764a61484d819056f807d2a91f1e
// HJ50-2 四则运算.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 #include<iostream> #include<bits/stdc++.h> using namespace std; class Solution { public: int ComputerNum(string& s,int left,int right); }; int Solution::ComputerNum(string& s,int left,int right) { char op = '+'; vector<int>dp; int sum = 0; int num = 0; for (int i = left; i <= right; i++) { if (isdigit(s[i])) { num = num * 10 + s[i] - '0'; } if (s[i] == '{' || s[i] == '[' || s[i] == '(') { int layer = 0; int j = i; while (j <= right) { if (s[j] == '{' || s[j] == '[' || s[j] == '(') { layer++; } else if (s[j] == ')' || s[j] == ']' || 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() { Solution a; string s; while (getline(cin, s)) { cout << a.ComputerNum(s,0,s.size()-1) << endl; } return 0; }