当前位置: 首页 > 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;
}

相关文章:

  • 如何在 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面向对象面试题及参考答案
  • 数据结构:反射 和 枚举
  • 抖音代刷网站推广快速/郑州外语网站建站优化
  • 淘客网站备案/谷歌海外推广怎么做
  • 六安市城乡建设委员会网站/西安百度seo
  • notepad做网站技巧/主流搜索引擎有哪些
  • java做安卓游戏破解版下载网站/收录优美的图片
  • 台州建设局招标投标网站/留号码的广告网站