-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path224-基本计算器.js
More file actions
60 lines (55 loc) · 1.99 KB
/
Copy path224-基本计算器.js
File metadata and controls
60 lines (55 loc) · 1.99 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
58
59
60
var calculate = function(s) {
let _s = s.split('').filter(i => i !== ' ')
let numStack = []
let operatorStack = []
let result = 0
if(_s.length < 3){
return parseFloat(_s.join(''))
}
for(let i = 0 ; i < _s.length; i++){
let str = _s[i]
if(str === '+' || str === '-' || str === '('){
operatorStack.push(str)
}else if(str === ')'){
operatorStack.push(')')
//监测到可以运算的最小区域
for(let j = operatorStack.length; j>=0; j--){
if(operatorStack[j] === '('){
let num = operatorStack.length - 1 - j
let minNum = 0
minNum += parseFloat(numStack[numStack.length - num])
for(let k = 1; k < num; k++ ){
if(operatorStack[j+ k] === '+'){
minNum += parseFloat(numStack[numStack.length - num + k])
}else{
minNum -= parseFloat(numStack[numStack.length - num + k])
}
}
numStack[numStack.length - num] = minNum
numStack.length = numStack.length - num +1
operatorStack.length = j
break
}
}
}else{
if(
!_s[i-1] || (['+','-','(',')'].includes(_s[i-1])) || (['+','-','(',')'].includes(_s[i-1]))
){
numStack.push(str)
}else{
if(numStack[numStack.length-1]){
numStack[numStack.length-1] = numStack[numStack.length-1] + str
}
}
}
}
result += parseFloat(numStack[0])
for(let i = 1; i <= operatorStack.length; i++ ){
if(operatorStack[i-1] === '+'){
result += parseFloat(numStack[i])
}else{
result -= parseFloat(numStack[i])
}
}
return result
};