-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathBasic Calculator
More file actions
57 lines (53 loc) · 1.59 KB
/
Basic Calculator
File metadata and controls
57 lines (53 loc) · 1.59 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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/*************************************************
mplement a basic calculator to evaluate a simple expression string.
The expression string may contain open ( and closing parentheses ), the plus + or minus sign -, non-negative integers and empty spaces .
You may assume that the given expression is always valid.
Some examples:
"1 + 1" = 2
" 2-1 + 2 " = 3
"(1+(4+5+2)-3)+(6+8)" = 23
Note: Do not use the eval built-in library function.
*************************************************/
class Solution {
public:
int calculate(string s) {
int n = s.size();
stack<int> stack_num;
stack<int> stack_sign;
int num = 0;
int sum = 0;
int sign = 1;
for(int i = 0;i<n;i++)
{
if(s[i]==' ') continue;
else if(s[i]>='0'&&s[i]<='9')
{
num = num*10+s[i]-'0';
}
else
{
sum = sum+num*sign;
num = 0;
if(s[i]=='+') sign = 1;
if(s[i]=='-') sign = -1;
if(s[i]=='(')
{
stack_num.push(sum);
stack_sign.push(sign);
sign = 1;
sum = 0;
}
if(s[i]==')')
{
int tmp_sum = stack_num.top();
int tmp_sign = stack_sign.top();
stack_num.pop();
stack_sign.pop();
sum = tmp_sum + sum*tmp_sign;
}
}
}
sum = sum + num*sign;
return sum;
}
};