当前位置: 首页 > article >正文

力扣227:基本计算器II

给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。

整数除法仅保留整数部分。

你可以假设给定的表达式总是有效的。所有中间结果将在 [-231, 231 - 1] 的范围内。

注意:不允许使用任何将字符串作为数学表达式计算的内置函数,比如 eval() 。

示例 1:

输入:s = "3+2*2"
输出:7

示例 2:

输入:s = " 3/2 "
输出:1

示例 3:

输入:s = " 3+5 / 2 "
输出:5

代码:

int calculate(char *s) {
    int len = strlen(s);
    // 获取输入字符串的长度。
    int stack[len];
    // 定义一个整数数组 stack,用于模拟栈,存储中间结果。
    int top = 0;
    // 定义一个变量 top,用于表示栈顶位置,初始值为 0,表示栈为空。
    long ans = 0;
    // 定义一个长整型变量 ans,用于存储最终的计算结果。
    long num = 0;
    // 定义一个长整型变量 num,用于临时存储数字。
    char sign = '+';
    // 定义一个字符变量 sign,用于记录上一个操作符,初始值为 '+'。

    for (int i = 0; i <= len; i++) {
        // 遍历输入字符串。
        if (isdigit(s[i])) {
            num = num * 10 + (s[i] - '0');
            // 如果当前字符是数字,将其转换为数字并累加到 num 中。
        } else {
            if (s[i] == ' ') {
                continue;
            }
            // 如果当前字符是空格,跳过。
            if (sign == '+') {
                stack[top++] = num;
            } else if (sign == '-') {
                stack[top++] = -num;
            } else if (sign == '*') {
                stack[top - 1] *= num;
            } else if (sign == '/') {
                stack[top - 1] /= num;
            }
            // 根据上一个操作符 sign 的值,对 num 进行相应的操作,并将结果存入栈中。
            sign = s[i];
            // 更新 sign 为当前操作符。
            num = 0;
            // 重置 num 为 0,准备下一个数字的读取。
        }
    }

    while (top > 0) {
        ans += stack[--top];
    }
    // 遍历栈,将栈中的所有元素相加,得到最终结果。

    return ans;
    // 返回最终的计算结果。
}


http://www.kler.cn/a/373759.html

相关文章:

  • AI代币是什么?AI与Web3结合的未来方向在哪里?
  • 9种 Vuejs 常用事件修饰符与使用指南
  • 代码随想录-字符串-反转字符串中的单词
  • 什么是目标检测?
  • Spring Boot 实现文件分片上传和下载
  • 环形运输距离Conveyor Belts
  • Java语言的Springboot框架+云快充协议1.5+充电桩系统+新能源汽车充电桩系统
  • 派生类重载的delete操作符调用时可以动态绑定吗
  • 创建一个基于SSM框架的药品商超管理系统
  • springboot响应文件流文件给浏览器+前端下载
  • redis详细教程(3.hash和set类型)
  • [TypeError]: type ‘AbstractProvider‘ is not subscriptable
  • 三项智能网联汽车强制性国家标准正式发布(附图解)
  • 应用在汽车控制系统安全气囊的爱普生可编程晶振SG-8018CG
  • SpringBoot技术:闲一品交易的新机遇
  • Java 多线程(九)—— JUC 常见组件 与 线程安全的集合类
  • ComfyUI正式版来袭!一键安装无需手动部署!支持所有电脑系统
  • 线程本地变量-ThreadLocal
  • CMake知识点
  • [LeetCode] 36. 有效的数独
  • JAVA的动态代理
  • 创新实践:基于边缘智能+扣子的智能取物机器人解决方案
  • DDRPHY数字IC后端设计实现系列专题之后端设计导入,IO Ring设计
  • Java中String的length与Oracle数据库中VARCHAR2实际存储长度不一致的问题
  • 【优选算法篇】前缀之美,后缀之韵:于数列深处追寻算法的动与静
  • 面试题:JVM(一)