题解 | #四则运算#
四则运算
https://www.nowcoder.com/practice/9999764a61484d819056f807d2a91f1e
我只希望考试别要考到这题
let str = readline(); let stack = []; let num = ''; str = str.replace('{', '(').replace('[', '(').replace('}', ')').replace(']', ')'); for(let i = 0; i < str.length; i++) { let item = str[i]; if('+-*/()'.indexOf(item) > -1) { if(num) { stack.push(Number(num)); } stack.push(item); num = ''; } else { num += item; } } if(num) stack.push(Number(num)); // getSum 用来运算 function getSum(arr) { if(arr[0] == '-') { let temp = arr[1]; arr.shift(); arr[0] = [-temp]; } while(arr.includes("*") || arr.includes("/")) { for(let i = 0; i < arr.length; i++) { if(arr[i] == '*' || arr[i] == '/') { let li = i + 1; let fi = i - 1; let result = 0; if(arr[i] == '*') { result = arr[fi] * arr[li]; } if(arr[i] == '/') { result = arr[fi] / arr[li]; } arr.splice(fi, 3, result); break; } } } let sum = arr[0]; for(let i = 0; i < arr.length; i++) { if(arr[i] == '+') { sum += arr[i+1]; } else if(arr[i] == '-') { sum -= arr[i+1]; } } return sum; } // 找出()里面的先运算 for(let i = 0; i < stack.length; i++) { let fi = 0; let li = stack.length - 1; if(stack[i] == ')') { li = i; for(let j = li; j >= 0; j--) { if(stack[j] == '(') { fi = j; let arr = stack.slice(fi+1, li); let result = getSum(arr); stack.splice(fi, li-fi+1, result); i = fi; break; } } } } if(stack[0] == '-') { let temp = stack[1]; stack.shift(); stack[0] = [-temp]; } let sum = getSum(stack); console.log(sum);