STL-stack栈:P1981 [NOIP2013 普及组] 表达式求值
这个题用的STL-栈来做
题目来源:洛谷
相关知识

[NOIP2013 普及组] 表达式求值
题目背景
NOIP2013 普及组 T2
题目描述
给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值。
输入格式
一行,为需要你计算的表达式,表达式中只包含数字、加法运算符 + 和乘法运算符 *,且没有括号,所有参与运算的数字均为 0 0 0 到 2 31 − 1 2^{31}-1 231−1 之间的整数。
输入数据保证这一行只有 0123456789+* 这 12 12 12 种字符。
输出格式
一个整数,表示这个表达式的值。
注意:当答案长度多于 4 4 4 位时,请只输出最后 $ 4$ 位,前导 $ 0$ 不输出。
样例 #1
样例输入 #1
1+1*3+4
样例输出 #1
8
样例 #2
样例输入 #2
1+1234567890*1
样例输出 #2
7891
样例 #3
样例输入 #3
1+1000000003*1
样例输出 #3
4
提示
对于 30 % 30\% 30% 的数据, 0 ≤ 0≤ 0≤ 表达式中加法运算符和乘法运算符的总数 ≤ 100 ≤100 ≤100。
对于 80 % 80\% 80% 的数据, 0 ≤ 0≤ 0≤ 表达式中加法运算符和乘法运算符的总数 ≤ 1000 ≤1000 ≤1000。
对于 100 % 100\% 100% 的数据, 0 ≤ 0≤ 0≤ 表达式中加法运算符和乘法运算符的总数 ≤ 100000 ≤100000 ≤100000。
题意
求出一个只含*和+的表达式的值(中缀表达式),但是值只输出后四位(去除前导0)
思路
-
题目因为只有*和+就相对简单。表达式求值可以用栈来做,字符串储存数据然后分别压入栈处理。但因为某个数字是字符串如:12345 ,所以需要特殊处理,遇到下一个符号/换行符时,才会得到该数据
if (isdigit(c)) {num = num * 10 + (c - '0'); isdigit(c) 计算机C(C++)语言中的一个函数,主要用于检查其参数是否为十进制数字字符。} -
只有两个运算符,因为考虑优先级,所以符号就没必要压入栈,只需要即将运算的数据放入栈中,每次遇到符号后就处理:计算当前表达式
a +/* b,将结果压入栈即可。但什么时候压栈?什么时候出栈? -
可以考虑栈中只存放所有相加的数据,即:将优先级高的 *先计算出来!
如: k+a*b+c
- a*b的结果要当遍历到b时,才会计算结果,而要确定b这个数据(像12345 这个数字,就是字符串遍历到5之后如果出现了字符’+'才会确定),就需要遇到下一个符号时才会计算,即:考虑用变量储存b之前的符号,当遍历完b后,把计算a*b的相乘的结果,并储存当前运算符。

- a*b的结果要当遍历到b时,才会计算结果,而要确定b这个数据(像12345 这个数字,就是字符串遍历到5之后如果出现了字符’+'才会确定),就需要遇到下一个符号时才会计算,即:考虑用变量储存b之前的符号,当遍历完b后,把计算a*b的相乘的结果,并储存当前运算符。
-
题目要求只输出最后四位,我们只需要将每一个压入栈的数据%10000即可!注意是四个0!。而前导0 的问题,由于计算都是用int类型,%10000后会自动去掉无效的前导0
数据约束
暂无
参考代码
#include <bits/stdc++.h>
using namespace std;
int m = 10000;
int main() {string a;getline(cin, a); // 读取表达式stack<int> s; // 栈用于存储数值int num = 0; // 临时存储当前数字char op = '+'; // 当前操作符,初始化为加号for (int i = 0; i < a.size(); i++) {char c = a[i];// 如果是数字 isdigit(c) 计算机C(C++)语言中的一个函数,主要用于检查其参数是否为十进制数字字符。if (isdigit(c)) {num = num * 10 + (c - '0');}// 如果是运算符或者是最后一个字符if (!isdigit(c)|| i == a.size() - 1) {if (op == '+') {s.push(num%m); // 当前是加法,直接入栈} else if (op == '*') {int top = s.top();s.pop();s.push((top * num)%m); // 当前是乘法,和栈顶数值进行乘法运算} op = c; // 更新操作符num = 0; // 重置当前数字}}// 计算结果int result = 0;while (!s.empty()) {result += s.top();result %= m;s.pop();}cout << result; // 输出计算结果return 0;
}相关文章:
STL-stack栈:P1981 [NOIP2013 普及组] 表达式求值
这个题用的STL-栈来做 题目来源:洛谷 相关知识 [NOIP2013 普及组] 表达式求值 题目背景 NOIP2013 普及组 T2 题目描述 给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值。 输入格式 一行,为需要你计算的表达式ÿ…...
Java使用stream进行分组汇总失效问题
背景 在当前项目的开发任务中需要定制财务报表导出功能,格式比较特殊使用了VM。在汇总数据的过程中使用了stream.collect 进行分组汇总。在测试的过程中发现分组失败,最终原因是对象的对比方式问题,collect是根据对象对比的所以需要重写equa…...
VMWare虚拟机安装华为欧拉系统
记录一下安装步骤: 1.在vmware中创建一个新的虚拟机,步骤和创建centos差不多 2.启动系统 具体的看下图: 启动虚拟机 耐心等待 等待进度条走完重启系统就完成了...
阿里云轻量应用服务器可以用在哪些场景呢
在数字化转型的浪潮中,中小企业面临着如何快速、高效地上云的挑战。阿里云轻量应用服务器(SWAS)作为一款专为中小企业设计的云服务产品,提供了简单易用、经济实惠的解决方案,助力企业轻松实现云端部署,赋能…...
OrangePi 5plus yolov5 部署全过程
准备工作 一、下载用户手册 下载-Orange Pi官网-香橙派(Orange Pi)开发板,开源硬件,开源软件,开源芯片,电脑键盘 里面有详细的镜像烧录教程和桌面使用等 二、镜像下载 准备一张TF卡(32G以上),插入电脑,…...
Rust中::和.的区别
在 Rust 中,:: 和 . 是两种常用的操作符,它们的作用和语法用途不同。以下是详细的对比和解释: 1. ::(双冒号) :: 是 路径操作符,主要用于访问模块、结构体、枚举、函数、常量等的命名空间中的成员。 主要…...
集群聊天服务器(7)数据模块
目录 Mysql数据库代码封装头文件与源文件 Mysql数据库代码封装 业务层代码不要直接写数据库,因为业务层和数据层的代码逻辑也想完全区分开。万一不想存储mysql,想存redis的话,就要改动大量业务代码。解耦合就是改起来很方便。 首先需要安装m…...
VS Code 更改背景颜色
我们的 VS code 默认是 黑色,这个颜色在有光的情况下,个人感觉反光比较严重。 所以换成白色了。 步骤: 选择 File -> Preferences -> Settings Workbench -> Appearance -> Color Theme -> 选择喜欢的颜色 选择后会变为你选…...
OpenAI 助力数据分析中的模式识别与趋势预测
数据分析师的日常工作中,发现数据中的隐藏模式和预测未来趋势是非常重要的一环。借助 OpenAI 的强大语言模型(如 GPT-4),我们可以轻松完成这些任务,无需深厚的编程基础,也能快速上手。 在本文中࿰…...
IDM扩展添加到Edge浏览器
IDM扩展添加到Edge浏览器 一般情况下,当安装IDM软件后,该软件将会自动将IDM Integration Module浏览器扩展安装到Edge浏览器上,但在某些情况下,需要我们手动安装,以下为手动安装步骤 手动安装IDM扩展到Edge浏览器 打…...
【SpringBoot】26 实体映射工具(MapStruct)
Gitee 仓库 https://gitee.com/Lin_DH/system 介绍 现状 为了让应用程序的代码更易于维护,通常会将项目进行分层。在《阿里巴巴 Java 开发手册》中,推荐分层如下图所示: 每层都有对应的领域模型,即不同类型的 Bean。 DO&…...
分层架构 IM 系统之架构演进
在电商业务日活几百万的情况下,IM 系统采用分层架构方式,如下图。 分层架构的 IM 系统,整体上包含了【终端层】、【入口层】、【业务逻辑层】、【路由层】、【数据访问层】和【存储层】,我们在上篇文章(分层架构 IM 系…...
基于YOLOv8深度学习的医学影像阿尔兹海默症检测诊断系统研究与实现(PyQt5界面+数据集+训练代码)
阿尔茨海默症(Alzheimer’s disease)是一种常见的神经退行性疾病,主要表现为记忆丧失、认知能力下降以及行为和人格改变。随着全球老龄化问题的加剧,阿尔茨海默症的发病率也在逐年上升,给患者及其家庭带来了巨大的经济…...
【支持向量机(SVM)】:相关概念及API使用
文章目录 1 SVM相关概念1.1 SVM引入1.1.1 SVM思想1.1.2 SVM分类1.1.3 线性可分、线性和非线性的区分 1.2 SVM概念1.3 支持向量概念1.4 软间隔和硬间隔1.5 惩罚系数C1.6 核函数 2 SVM API使用2.1 LinearSVC API 说明2.2 鸢尾花数据集案例2.3 惩罚参数C的影响 1 SVM相关概念 1.1…...
Android kotlin之配置kapt编译器插件
配置项目目录下的gradle/libs.versions.toml文件,添加kapt配置项: 在模块目录下build.gradle.kt中增加 plugins {alias(libs.plugins.android.application)alias(libs.plugins.jetbrains.kotlin.android)// 增加该行alias(libs.plugins.jetbrains.kotl…...
时序数据库TDEngine
TDengine 是一款开源、高性能、云原生的时序数据库(Time Series Database, TSDB), 它专为物联网、车联网、工业互联网、金融、IT 运维等场景优化设计。同时它还带有内建的缓存、流式计算、数据订阅等系统功能,能大幅减少系统设计的复杂度&…...
jd-easyflow中inclusive的用法
在jd-easyflow中,inclusive通常与流程中的条件分支(conditions)配置相关,用于控制多个条件分支的执行逻辑。当conditionType设置为inclusive时,表示多个条件分支中的所有条件都会被评估,而不是像exclusive那…...
sqlmap图形化安装使用(附文件)
1.需要python环境,我这里就不教如何安装python环境了。 2.下载压缩包并且解压 3. 凭自己喜好选择大窗口小窗口 4.进入图形化界面后,1.输入url地址。2.选择要执行的操作。3.构造命令语句 5.点击一把梭,然后就可以发现出结果了 6. 对于喜欢自己…...
从二维到一维:动态规划矩阵问题的优化之道
动态规划中的矩阵问题是非常经典的应用场景,比如最小路径和问题。这类问题很自然地可以想到使用二维 dp 数组来求解。 我们定义: dp[i][j] 表示从矩阵的第 i行第 j列到右下角的最小路径和。 基本解法 求解过程从右下角开始,向左上角遍历&am…...
计算机视觉(CV):让机器看懂世界
引言 计算机视觉(Computer Vision, CV)是人工智能的重要领域,致力于让机器能够“看懂”世界。CV技术广泛应用于自动驾驶、医疗影像、安防监控和娱乐领域,正在改变我们的生活方式。 本文将从基本概念、技术方法、应用场景和发展方向…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...
