题解 | 表达式求值

#牛客创作赏金赛# #刷题我是认真的#

解题思路:

  1. 坑爹的题,这个真不是简单题型,各种判断,写了一遍,还是错误
  2. 小心 负号
  3. 只能求助AI了,以下是AI提供的解法
import java.util.Scanner;
import java.util.Stack;

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

    public static int calculate(String s) {
        // 去掉所有空格
        s = s.replaceAll(" ", "");
        // 使用栈来存储数字和中间结果
        Stack<Integer> stack = new Stack<>();
        // 当前数字
        int num = 0;
        // 当前运算符
        char sign = '+';
        // 遍历字符串
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            // 如果是数字,解析完整的数字
            if (Character.isDigit(c)) {
                num = num * 10 + (c - '0');
            }
            // 如果是左括号,递归计算括号内的表达式
            if (c == '(') {
                int j = i, count = 0;
                for (; i < s.length(); i++) {
                    if (s.charAt(i) == '(') count++;
                    if (s.charAt(i) == ')') count--;
                    if (count == 0) break;
                }
                num = calculate(s.substring(j + 1, i));
            }
            // 如果是运算符或到达字符串末尾,处理栈中的内容
            if (!Character.isDigit(c) || i == s.length() - 1) {
                if (sign == '+') {
                    stack.push(num);
                } else if (sign == '-') {
                    stack.push(-num);
                } else if (sign == '*') {
                    stack.push(stack.pop() * num);
                } else if (sign == '/') {
                    stack.push(stack.pop() / num);
                }
                // 更新当前运算符
                sign = c;
                // 重置当前数字
                num = 0;
            }
        }
        // 计算栈中所有数字的和
        int result = 0;
        while (!stack.isEmpty()) {
            result += stack.pop();
        }
        return result;
    }
}

全部评论

相关推荐

01-09 14:20
2025年1月7日(腊八)上午,我司召开了2024年度高管工作总结会暨2025年新一届董事会。北京罕能教育科技有限公司安徽省分公司负责人——吕晓霞担任主持人。一、会议第一阶段:北京罕能高管总结会01&nbsp;总顾问致辞首先,北京罕能教育科技有限公司总顾问进行致辞,对我司的发展以及人员配置给予厚望,激励我司员工要有敢为人先的精神,勤奋努力奋斗,共创公司美好未来。02&nbsp;总工程师发言谢建军,北京罕能教育科技有限公司总工程师,进行了关于线上渠道拓展的汇报,线上渠道发展稳步推进,海外多个平台将陆续上架北京罕能系列产品,进一步打开海外市场。03&nbsp;安徽省分公司负责人发言吕晓霞,北京罕能安徽分公司负责人,进行了安徽省分公司的工作汇报,从安徽省的市场分析、渠道团队建设、区域推广计划三个方面进行了详细的汇报以及对未来的展望。04&nbsp;总经理发言贾二虎,北京罕能教育科技有限公司总经理,对2024年公司关于教育装备系统集成项目进行了总结与回报,回顾了2024年我司的项目发展成果,为2025年我司项目改革以及公司进一步转型提供了经验参考,汲取成功经验,弥补短板漏洞,让公司更长远的发展。05&nbsp;董事长发言张政广,北京罕能教育科技有限公司董事长,对2024年全国巡回展及整体工作进行总结,会上对2024年进行的全国巡回展情况进行了分析,总结了经验,并对2025年的全国巡回展进行了初步规划,随后,对2025年人才培养、业务、山西省整体工作、海外市场工作进行了部署,在新的一年,公司成员要携手并进,乘风破浪。二、会议第二阶段:2025年新一届董事会会议第二阶段,召开了2025年新一届董事会,会议上对新加入董事会成员进行投票表决,并公布了新一届董事会成员名单,宣布新一届董事会人员的职务以及主要的负责的业务范围,新任董事会成员依次发表就职演讲,共同宣读公司企业使命、愿景、价值观。三、董事长总结展望01&nbsp;董事长展望2025年最后,北京罕能教育科技有限公司董事长张政广强调了2025年的整体工作部署,激励新晋董事会成员以及全体员工在新的一年里砥砺前行,共创佳绩,在“路虽远行则将至,事虽难做则必成”的指引下,勤奋进取,超越共创!践行企业使命:为绿色科技的数字校园而奋斗终生!全体合影◀END▶
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务