题解 | #四则运算#

四则运算

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);


全部评论

相关推荐

04-17 10:16
门头沟学院 Java
不河狸啊:为什么我的是已送达,连已读都没有
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务