信息学奥赛复赛复习09-CSP-J2020-03表达式求值前置知识点-中缀表达式求值、模运算、模运算性质、栈

PDF文档回复:20241002

**1 P1981 [NOIP2013普及组] 表达式求值 **

[题目描述]

给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值

[输入格式]

一行,为需要你计算的表达式,表达式中只包含数字、加法运算符 “+” 和乘法运算符 “×”,且没有括号,所有参与运算的数字均为 0 到 2^31之间的整数。

输入数据保证这一行只有 0∼9、+、× 这 12种字符

[输出格式]

一个整数,表示这个表达式的值。

注意:当答案长度多于 4 位时,请只输出最后 4 位,前导 0 不输出

[输入输出样例]

输入 #1

1+1*3+4

输出 #1

8

输入 #2

1+1234567890*1

输出 #2

7891

输入 #3

1+1000000003*1

输出 #2

4

说明/提示

对于 30% 的数据,0≤ 表达式中加法运算符和乘法运算符的总数 ≤100。

对于 80% 的数据,0≤ 表达式中加法运算符和乘法运算符的总数 ≤1000。

对于 100% 的数据,0≤ 表达式中加法运算符和乘法运算符的总数 ≤100000。

2 相关知识点

1) 模运算

模运算,就是取余数,在计算机语言中用%来表示。举个简单的例子,3 % 5 = 3。结果的取值范围在 0 与模之间

例如

c=x/y

c=3 mod 5 =3 c的取值范围 [0,y-1]

结果也可以用负数表示,即 c=-2

2) 模运算性质

(a + b) % p = (a % p + b % p) % p

(a - b) % p = (a % p - b % p ) % p

(a * b) % p = (a % p * b % p) % p

a ^ b % p = ((a % p)^b) % p

3) 栈

栈又名堆栈,是一种限定仅在表尾进行插入和删除操作的线性表,这一端称为栈顶,另一端称为栈底

栈中的数据元素遵守后进先出的原则

4) 中缀表达式

是一种常见的算术表达式表示方法,其中运算符位于操作数之间

例如

//示例1
3 + 4 * 2
//示例2
(1 + 2) * (3 - 4)

3 思路分析

由于本题只有2个操作数,+和*,且*的优先级大于+
因此可以提前先把*计算出来,剩余都是+运算符,再统一计算加
例如如下表达式,具体步骤如下
1+1*3+4
每次输入一个操作符和一个操作数
遇到*号,从栈中取出栈顶操作数和本次读取的操作数相乘
相乘的结果存入栈中

2读入下一个操作符+和操作数4
直接把4放入栈中

3 栈中3个操作数只剩下1种操作符+
遍历栈对这3个操作数相加,即为表达式的值

示例程序

#include<bits/stdc++.h>
using namespace std;
/*
栈 
1 存储 *前的操作数和相乘后的结果 
2 存储 + 号前后的操作数 
*/ 
stack<int> st; 
int f,t,ans;//f第1个操作数 t第2个操作数 ans运算结果 
char s;//操作符 
const int m=10000;//只输出最后4位,结果对m取模 
int main(){cin>>f;//输入第1个操作数 st.push(f%10000);//根据模运算乘法和加法性质,可以先取模 while(cin>>s>>t){//输入操作符号和第2个操作数,直到结束 if(s=='*'){//乘法提前计算结果,再存入栈,保证栈中只保留加法运算 f=st.top();//从栈中取出第1个操作数 st.pop();//弹出上面取出的操作数 /*把结算结果存入栈,后续把结果相加 根据模运算加法性质,可以先取模 */st.push(f*t%m);}else{//加法操作符 直接存入栈,后续取出相加 st.push(t);}}//遍历栈,栈中保留的都是加法操作数,可以直接相加 while(st.size()!=0){//遍历栈,直到没有任何元素 ans=(ans+st.top())%m;//把栈中每个数累加到ans st.pop();//累加后 从栈中弹出 }cout<<ans;//输出运算结果 return 0;
} 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1553194.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Stream流的中间方法

一.Stream流的中间方法 注意1&#xff1a;中间方法&#xff0c;返回新的Stream流&#xff0c;原来的Stream流只能使用一次&#xff0c;建议使用链式编程 注意2&#xff1a;修改Stream流中的数据&#xff0c;不会影响原来集合或者数组中的数据 二.filter filter的主要用法是…

SpringCloud-基于Docker和Docker-Compose的项目部署

一、初始化环境 1. 卸载旧版本 首先&#xff0c;卸载可能已存在的旧版本 Docker。如果您不确定是否安装过&#xff0c;可以直接执行以下命令&#xff1a; sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logro…

十一不停歇-学习ROS2第一天 (10.2 10:45)

话题通信 1.1 发布第一个节点&#xff1a; import rclpy #导入此类模块 rcl类型 from rclpy.node import Node #从这个子模块中导入这类函数 def main(): #定义这个函数 rclpy.init() #使用初始化函数 node Node(hello_python) 将类函数里面的内容调给…

基于SpringBoot原创歌曲分享平台设计与实现

1.1课题背景 随着科学技术发展&#xff0c;电脑已成为人们生活中必不可少的生活办公工具&#xff0c;在这样的背景下&#xff0c;网络技术被应用到各个方面&#xff0c;为了提高办公生活效率&#xff0c;网络信息技术飞速发展。在这样的背景下人类社会进入了全新的信息化的时代…

【CT511N-A(T0)大夏龙雀4G模块】GPS定位实操和各个参数解释(详细简单,一看就懂)

总览 1.前言 2.硬件软件需求 3.具体操作 3.1 重置&&冷启动&#xff08;重要&#xff09; 4.注意事项&#xff08;重要&#xff01;重要&#xff01;&#xff09; &#xff01;&#xff01;&#xff01;警告&#xff01;&#xff01;&#xff01; &#xff01;&#x…

信息安全实验2

文件链接&#xff1a; 通过网盘分享的文件&#xff1a;信息安全实验2 链接: https://pan.baidu.com/s/1Fs35ZE5xx52eFBusyx7GYg?pwdfcss 提取码: fcss

写出第一个php程序

一、打开vscode&#xff0c;下载chinese插件、php debug、phpintelephense 二、下载完上方图片插件后&#xff0c;创建一个PHP文件&#xff0c;1.php 三、执行命令&#xff0c;成功输出

Prometheus Metrics和PromQL的使用

Metrics 官方解释是 Metrics are numerical measurements in layperson terms. (通俗地讲&#xff0c;Metrics就是数字测量) Prometheus fundamentally stores all data as time series &#xff08;Prometheus把所有数据都存储为时间序列&#xff09; Every time series is u…

【数据分享】2001-2023年我国省市县镇四级的逐月平均气温数据(免费获取/Shp/Excel格式)

之前我们分享过1901-2023年1km分辨率逐月平均气温栅格数据&#xff0c;该数据来源于国家青藏高原科学数据中心。为方便大家使用&#xff0c;我们还基于上述平均气温栅格数据将数据处理为Shp和Excel格式的省市县三级逐月平均气温数据&#xff08;可查看之前的文章获悉详情&#…

基于SSM的高校勤工助学管理系统的设计与实现(源码+定制+参考文档)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

linux文件编程_线程

1. 基本概念 1.1. 进程与线程的概念 典型的UNIX/linux进程可以看成是只有一个控制线程&#xff0c;一个进程在同一时刻只做一件事情&#xff0c;有了多个控制线程后&#xff0c;在程序设计时可以把进程设计成在同一时刻做不止一件事&#xff0c;每个线程各自处理独立的任务。…

【重学 MySQL】五十、添加数据

【重学 MySQL】五十、添加数据 使用INSERT INTO语句添加数据基本语法示例插入多行数据注意事项 使用LOAD DATA INFILE语句批量添加数据其他插入数据的方式注意事项 在MySQL中&#xff0c;添加数据是数据库操作中的基本操作之一。 使用INSERT INTO语句添加数据 使用 INSERT IN…

多维度柱状图绘制

图形结果 绘制过程 数据如下 调整柱子宽度 Z轴设置 、 配色表

计算机网络:计算机网络体系结构 —— 专用术语总结

文章目录 专用术语实体协议服务服务访问点 SAP 服务原语 SP 协议数据单元 PDU服务数据单元 SDU 专用术语 实体 实体是指任何可以发送或接收信息的硬件或软件进程 对等实体是指通信双方处于相同层次中的实体&#xff0c;如通信双方应用层的浏览器进程和 Web 服务器进程。 协…

C++设计模式之观察者模式

一、观察者模式概念 观察者模式(Observer Pattern)是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象状态发生变化时,所有依赖于它的对象都会得到通知并自动更新。这种模式通常用于实现分布式事件处理系统,当一个对象(称为“主题”或“发布者”)改变状…

C动态内存管理

前言&#xff1a;不知不觉又过去了很长的一段时间。今天对C语言中的动态内存管理进行一个系统性的总结。 1 为什么要有动态内存分配 在C语言中&#xff0c;使用int&#xff0c;float&#xff0c;double&#xff0c;short等数据内置类型以及数组不是也可以开辟内存空间吗&…

【光伏混合储能】VSG并网运行,构网型变流器,虚拟同步机仿真

摘要 本文提出了一种基于光伏发电与混合储能系统结合的虚拟同步发电机&#xff08;VSG&#xff09;控制策略&#xff0c;该策略能够在并网运行时稳定电网电压和频率。通过仿真分析&#xff0c;验证了该策略在各种运行工况下的有效性&#xff0c;展示了其在电力系统中的广泛应用…

了解芯片光刻与OPC

欢迎关注更多精彩 关注我&#xff0c;学习常用算法与数据结构&#xff0c;一题多解&#xff0c;降维打击。 参考资料&#xff1a; 光刻技术与基本流程 https://www.bilibili.com/video/BV1tP4y1j7BA OPC https://www.bilibili.com/video/BV1o94y1U7Td 论文&#xff1a;计算…

CyberBattleSim项目熟悉遇到的问题

在看手册的时候&#xff0c;手册中说需要显卡&#xff0c;配置还不低。 ——师兄说不需要这个显卡&#xff0c;他的独显也能跑&#xff0c;现在能安装配置了&#xff0c;配置文件安装不了确定是否进入了创建的conda环境&#xff0c;多尝试几次。 随着在安装gym的时候&#xf…

【Python报错已解决】TypeError: ‘NoneType‘ object is not callable

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…