题解 | #表达式求值#递归法
表达式求值
https://www.nowcoder.com/practice/9566499a2e1546c0a257e885dfdbf30d
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void (async function () {
// Write your code here
const calculate = (str, left, right) => {
let option = "+";
let number = 0;
let arr = [];
for (let i = left; i <= right; i++) {
if (!isNaN(str[i])) {
// 判断是数字
number = number * 10 + parseInt(str[i]);
}
if (str[i] === "(") {
let layer = 0;
let j = i;
while (j <= right) {
if (str[j] === "(") layer++;
else if (str[j] === ")") {
layer--;
if (layer === 0) break;
}
j++;
}
number = calculate(str, i + 1, j - 1);
i = j + 1;
}
if (isNaN(str[i]) || i === right) {
switch (option) {
case "+":
arr.push(number);
break;
case "-":
arr.push(-number);
break;
case "*":
let final = arr.pop() * number;
arr.push(final);
break;
case "/":
final = arr.pop() / number;
arr.push(final);
break;
}
option = str[i];
number = 0;
}
}
let sum = 0;
for (const k of arr) sum += parseInt(k);
return sum;
};
while ((line = await readline())) {
const n = line.length;
console.log(calculate(line, 0, n - 1));
}
})();
阿里云成长空间 753人发布