-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBasic_Calculator.cpp
More file actions
36 lines (36 loc) · 1.01 KB
/
Copy pathBasic_Calculator.cpp
File metadata and controls
36 lines (36 loc) · 1.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
class Solution {
public:
int calculate(string s) {
stack<int> stack;
int result=0,number=0,sign=1;
for(int i=0;i<s.size();i++){
char c=s[i];
if(isdigit(c)){
number=number*10+(c-'0');
}else if(c=='+'){
result=result+sign*number;
sign=1;
number=0;
}else if(c=='-'){
result=result+sign*number;
sign=-1;
number=0;
}
else if(c=='('){
stack.push(result);
stack.push(sign);
result=0;
sign=1;
}
else if(c==')'){
result=result+sign*number;
number=0;
int prev_sign=stack.top(); stack.pop();
int prev_result=stack.top(); stack.pop();
result=prev_result+prev_sign*result;
}
}
result=result+sign*number;
return result;
}
};