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

【算法】3302. 表达式求值

题目

3302. 表达式求值

思路

把数字压入栈后 i = j - 1是因为while最后还有个i++,所以先减去1,才能抵消,下一次才能读下一个字符或数。

代码

#include <iostream>
#include <stack>
#include <string>
#include <unordered_map>
using namespace std;
stack<int> num;
stack<char> op;
unordered_map<char, int> h{ {'+', 1}, {'-', 1}, {'*',2}, {'/', 2} };
void eval()//求值
{
    int a = num.top();//第二个操作数
    num.pop();
    int b = num.top();//第一个操作数
    num.pop();
    char p = op.top();//运算符
    op.pop();
    int r = 0;
    //计算结果
    if (p == '+') r = b + a;
    if (p == '-') r = b - a;
    if (p == '*') r = b * a;
    if (p == '/') r = b / a;
    num.push(r);//结果入栈
}
int main()
{
    string s;//读入表达式
    cin >> s;
    for (int i = 0; i < s.size(); i++)
    {
        if (isdigit(s[i]))//数字入栈
        {
            int x = 0, j = i;
            while (j < s.size() && isdigit(s[j]))
            {
                x = x * 10 + s[j] - '0';
                j++;
            }
            num.push(x);
            i = j - 1;
        }
        else if (s[i] == '(')
        {
            op.push(s[i]);
        }
        else if (s[i] == ')')//右括号
        {
            while(op.top() != '(')
                eval();
            op.pop();//左括号出栈
        }
        else
        {
            while (op.size() && h[op.top()] >= h[s[i]])
                eval();
            op.push(s[i]);
        }
    }
    while (op.size()) eval();
    cout << num.top() << endl;
    return 0;
}

文章转载自:

http://K9B9K0m6.Lqypx.cn
http://jBYhvWCh.Lqypx.cn
http://G76bcgNU.Lqypx.cn
http://pEghmBvx.Lqypx.cn
http://ngo6tyWC.Lqypx.cn
http://9wDfsQeF.Lqypx.cn
http://2BRUH0O1.Lqypx.cn
http://xTYUz1nW.Lqypx.cn
http://zdo7zVVJ.Lqypx.cn
http://VoLba4uB.Lqypx.cn
http://Mutdk09c.Lqypx.cn
http://awPpL0i4.Lqypx.cn
http://obCvLpWe.Lqypx.cn
http://FLHSZ1JV.Lqypx.cn
http://L49nVE4v.Lqypx.cn
http://qjz0qucw.Lqypx.cn
http://TR9NIToA.Lqypx.cn
http://DIQrQiea.Lqypx.cn
http://gcIFYidX.Lqypx.cn
http://suSwJgTv.Lqypx.cn
http://f3IYh3ae.Lqypx.cn
http://Pt6uPE09.Lqypx.cn
http://S1z8oiDy.Lqypx.cn
http://8IqPCwca.Lqypx.cn
http://ezJGVl9r.Lqypx.cn
http://lp1n0J3g.Lqypx.cn
http://F7w5rpRX.Lqypx.cn
http://48i5tERU.Lqypx.cn
http://4pW9wTj5.Lqypx.cn
http://5blUURBA.Lqypx.cn
http://www.dtcms.com/a/45745.html

相关文章:

  • 如何在 ArcGIS Pro 中将SHP转为KML:详细步骤与操作指南
  • 如何把图片或者图片地址存到 MySQL 数据库中以及如何将这些图片数据通过 JSP 显示在网页中
  • 2 Redis 字符串(String) 命令大全
  • ISP CIE-XYZ色彩空间
  • Keil5 MDK使用记录
  • 【Java项目】基于SpringBoot的广场舞团管理系统
  • 华为开源自研AI框架昇思MindSpore应用案例:基于MindSpore框架实现one-stage目标检测模型SSD
  • 解锁责任链模式:Java 实战与应用探秘
  • 人工智能之数学基础:矩阵的范数
  • 样式和ui(待更新)
  • 【TI毫米波雷达】DCA1000的ADC原始数据C语言解析及FMCW的Python解析2D-FFT图像
  • Git与GitHub:它们是什么,有什么区别与联系?
  • 软件测试学习1
  • threeJs+vue 加载gltf模型、获取模型尺寸、播放模型动画
  • 如何高效学习 Java
  • P8720 [蓝桥杯 2020 省 B2] 平面切分--set、pair
  • 【目录】系统架构设计师—学习笔记
  • Spring Boot 事件机制
  • Python面向对象面试题及参考答案
  • 数据结构:反射 和 枚举
  • Sql Server数据库远程连接访问配置
  • ‘ts-node‘ 不是内部或外部命令,也不是可运行的程序
  • Java集合对比
  • LeetCode72编辑距离(动态规划)
  • YoloV8改进策略:Block改进|CBlock,Transformer式的卷积结构|即插即用
  • reverse学习
  • Boosting
  • 基于SpringBoot的美妆购物网站系统设计与实现现(源码+SQL脚本+LW+部署讲解等)
  • 国自然面上项目|基于多模态MR影像的胶质母细胞瘤高危区域定位及预后预测研究|基金申请·25-02-28
  • Unity中VFX烟雾特效与场景中的碎片物体重叠时闪烁问题