rambless

四则运算

https://www.nowcoder.com/practice/9999764a61484d819056f807d2a91f1e

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        String s = in.nextLine();
        s = s.replace("[", "(");
        s = s.replace("{", "(");
        s = s.replace("]", ")");
        s = s.replace("}", ")");
        System.out.println(fn(s));
    }

    private static int fn(String s) {
        // 逻辑:碰到符号的时候放数字、碰到括号的时候算括号里边的
        LinkedList<Integer> stack = new LinkedList<>();
        char[] arr = s.toCharArray();
        int num = 0;
        char sign = '+';
        for (int i = 0; i < arr.length; i++) {
            char c = arr[i];
            if (Character.isDigit(c)) {
                num = num * 10 + Integer.parseInt(c + "");
            } else if (c == '(') {
                // 括号计数
                int size = 1;
                int j = i + 1;
                while (size > 0) {
                    char t = s.charAt(j);
                    if (t == '(') {
                        size++;
                    } else if (t == ')') {
                        size--;
                    }
                    j++;
                }
                num = fn(s.substring(i + 1, j - 1));
                i = j - 1;
            } else {
                if (sign == '+') {
                    stack.push(num);
                } else if (sign == '-') {
                    stack.push(-num);
                } else if (sign == '*') {
                    stack.push(stack.pop() * num);
                } else {
                    stack.push(stack.pop() / num);
                }
                sign = c;
                num = 0;
            }
        }
        //处理最后一个数字
        if (sign == '+') {
            stack.push(num);
        } else if (sign == '-') {
            stack.push(-num);
        } else if (sign == '*') {
            stack.push(stack.pop() * num);
        } else {
            stack.push(stack.pop() / num);
        }
        int sum = 0;
        while (!stack.isEmpty()) {
            sum += stack.pop();
        }
        return sum;
    }
}

全部评论

相关推荐

2025-12-29 20:37
已编辑
清华大学附属小学 Java
哇哇的菜鸡oc:1.为什么要写这么多内容呀 2.什么叫做简历 3.什么样的内容可以写到简历上 4.项目可以包装,但是要有理有据呀,不能乱包装呀,比如 跨境能达到日均120万订单的在国内都是能叫的上名字的,而且这些工作也基本上不太会交给一个实习生去做 建议友友可以去网上或者找同学的简历看看,他们的简历是怎么写的,去找找上面的那四个问题的答案吧,然后要记住的是Java是服务于业务的,而不是服务于微服务或者技术的
最后再改一次简历
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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