题解 | #四则运算#
四则运算
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);
}
顺丰集团工作强度 335人发布
