题解 | #表达式求值#

表达式求值

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 () {
    console.log(eval(await readline()));
})();

// 方法二:栈+递归  400+(100/5)+5
void (async function () {
    const str = await readline();    
    const calculate = (str) => {
        const stack = [];
        let ops = "+";
        for (let i = 0; i < str.length; i++) {
            const c = str.charAt(i);
            if (/\d/.test(c)) {
                let num = c;
                while(i+1<str.length && /\d/.test(str.charAt(i+1))) num += str.charAt(++i);
                stack.push(Number(num));
            } else if (c === "(") {
                let sub = "",cnt = 1;
                while(i+1<=str.length && cnt > 0) {
                    sub += str.charAt(++i);
                    if(str.charAt(i+1) == ")") cnt --;
                    if(str.charAt(i+1) == "(") cnt ++;
                }
                stack.push(Number(calculate(sub)));
            } else {
                ops = c;
                continue;                
            }
            switch(ops){
                case "+":
                    break;
                case "-":
                    stack.push(stack.pop()*(-1));
                    break;
                case "*":
                    {
                        let second = stack.pop();
                        stack.push(stack.pop()*second);
                        break;
                    }
                case "/":
                    {
                        let second = stack.pop();
                        stack.push(stack.pop()/second);
                        break;
                    }
            }
        }
        return stack.reduce((pre,cur)=>pre+cur,0);
    };
    console.log(calculate(str));
})();

全部评论

相关推荐

2025-12-22 15:04
江西农业大学 Web前端
SaviorSu:直接说下学期可以请假,一般情况学校允许我26届,大三就直接去实习了
点赞 评论 收藏
分享
01-12 17:45
门头沟学院 Java
985废物一枚:就是问问你能不能接受北京的房租,hr也知道公司工资不高,大概率是要贴钱的
找实习记录
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务