题解 | #表达式求值#
表达式求值
https://www.nowcoder.com/practice/9566499a2e1546c0a257e885dfdbf30d
//https://www.nowcoder.com/practice/9566499a2e1546c0a257e885dfdbf30d?tpId=37&rp=1&ru=%2Fexam%2Foj%2Fta&qru=%2Fexam%2Foj%2Fta&sourceUrl=%2Fexam%2Foj%2Fta%3Fpage%3D1%26pageSize%3D50%26search%3D%26tpId%3D37%26type%3D37&difficulty=&judgeStatus=&tags=&title=54&gioEnter=menu
#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]=='('){
int layer = 0;
for(int j = i;j<=right;j++){
if(s[j]=='(')
layer++;
if(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);
}
