https://leetcode-cn.com/problems/basic-calculator-ii/
参考leetcode大神写的
 + - ( )(224. 基本计算器) 或者 + - * /(227. 基本计算器 II) 或者有锁题,包含符号 + - * / ( ) 772. 基本计算器 III 亦或是进阶题, 包含自定义函数符号 770. 基本计算器 IV 
的表达式
双栈解决「通用表达式」问题的通用解法
https://leetcode-cn.com/problems/basic-calculator-ii/solution/shi-yong-shuang-zhan-jie-jue-jiu-ji-biao-c65k/
const readline = require('readline');
const rl = readline.createInterface({
    input:process.stdin,
    output:process.stdout
});
const opsMap = {'+':1,'-':1,'*':2,'/':2};
const convert = (inputs) => {
    if(!inputs.length)return;
    let ops = [];
    let temp = [];
    for(let i = 0; i < inputs.length; i++){
        let cs = inputs[i];
        if(/\d/.test(cs)){// 数字
            temp.push(cs);
            while(i+1 < inputs.length && /\d/.test(inputs[i + 1])){
                temp[temp.length - 1] += inputs[i+1];
                i++;
            }
        }else if(cs === '('){ // 入栈 操作符
                ops.push(cs)
                if(inputs[i+1]==='+'||inputs[i+1]==='-'){
                    temp.push('0');
                }
            }else if(cs === ')'){
                while(ops.length){
                    let op = ops.pop();
                    if(op === '('){
                        break;
                    }else{
                        temp.push(op)
                    }
                }
            }else{
                while(ops.length >= 0){
                    const topOp = ops[ops.length -1];
                    if(!ops.length || topOp === '(' || opsMap[cs] > opsMap[topOp]){
                        ops.push(cs);
                        break;
                    }else{
                        temp.push(ops.pop())
                    }
                }
                 
            }
    }
    while(ops.length){
        temp.push(ops.pop());
    }
    return temp;
}
const calculate = (temp) =>{
    if(!temp.length)return 0;
    let res = []
    temp.forEach(i=>{
        if(/\d/.test(i)){
            res.push(i)
        }else{
            const b = ~~res.pop();
            const a = ~~res.pop();
            if(i==='+') res.push(a+b);
            else if(i==='-') res.push(a-b);
            else if(i==='*') res.push(a*b);
            else if(i==='/') res.push(a/b);
        }
    })
    return res.pop();
     
}
rl.on('line',(line)=>{
    console.log(calculate(convert(line)))
})