仰望星空

位我上者,灿烂星空;道德律令,在我心中。

0%

基本计算器

【道德经·第二十三章】从事于道者同于道;德者同于德;失者同于失。同于道者,道亦乐得之;同于德者,德亦乐得之;同于失者,失亦乐得之。

基本计算器

题目描述

请写一个整数计算器,支持加减乘三种运算和括号。数据范围:0≤∣s∣≤100,保证计算结果始终在整型范围内。要求:空间复杂度: O(n),时间复杂度 O(n)。

示例1

1
2
输入:"1+2"
返回值:3

示例2

1
2
输入:"(2*(3-4))*5"
返回值:-10

示例3

1
2
输入:"3+2*3*4-1"
返回值:26

代码实现:

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
int solve(string s) {
// write code here
int n = s.size();
stack<int> stk;
char sign = '+';
int num = 0;
int ans = 0;

for(int i = 0; i < n; i++) {
char c = s[i];

if(c == ' ') continue;

if(c>='0' && c<='9') num = num*10 + (c-'0');

if(c == '(') {
int j = i+1;
int cnt = 1;
while(cnt > 0) {
if(s[j] == '(') cnt++;
if(s[j] == ')') cnt--;
j++;
}

num = solve(s.substr(i+1, j-i-1));
i = j-1;
}

if(i==n-1 || c=='+' || c=='-' || c=='*' || c=='/') {
switch(sign) {
case '+': stk.push( num); break;
case '-': stk.push(-num); break;
case '*': stk.top()*=num; break;
case '/': stk.top()/=num; break;
}

sign = c;
num = 0;
}

}

while(!stk.empty()) {
ans += stk.top();
stk.pop();
}

return ans;

}

位我上者,灿烂星空;道德律令,在我心中。