题解 | #四则运算#
四则运算
https://www.nowcoder.com/practice/9999764a61484d819056f807d2a91f1e
//https://www.nowcoder.com/practice/9999764a61484d819056f807d2a91f1e?tpId=37&tqId=21273&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3Fpage%3D1%26pageSize%3D50%26search%3D50%26tpId%3D37%26type%3D37&difficulty=undefined&judgeStatus=undefined&tags=&title=50 #include <iostream> #include <vector> using namespace std; int computer(string s, int left, int right){ char op = '+'; int num = 0; int res = 0; vector<int> opn; 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; for(int j = i;j<=right;j++){ if(s[j]=='{'||s[j]=='['||s[j]=='(') layer++; if(s[j]=='}'||s[j]==']'||s[j]==')'){ layer--; if(layer==0){ num = computer(s, i+1, j-1); i = j; break; } } } } if(!isdigit(s[i])||i==right){ switch(op){ case '+': opn.push_back(num); break; case '-': opn.push_back(-num); break; case '*': opn.back()*=num; break; case '/': opn.back()/=num; break; } op = s[i]; num = 0; } } for(const int &ans:opn) res+=ans; return res; } int main() { string s; while(cin >> s) cout << computer(s, 0, s.size()-1); }