【题解】【模拟】—— [NOIP2013 普及组] 表达式求值

embedded/2024/10/9 1:07:39/

【题解】【模拟】—— [NOIP2013 普及组] 表达式求值

  • [NOIP2013 普及组] 表达式求值
    • 题目背景
    • 题目描述
    • 输入格式
    • 输出格式
    • 输入输出样例
      • 输入 #1
      • 输出 #1
      • 输入 #2
      • 输出 #2
      • 输入 #3
      • 输出 #3
    • 提示
  • 1.简单做法
    • 1.1.题意解析
    • 1.2.AC代码
  • 2.使用栈的做法
    • 2.1.题意解析
    • 2.2.AC代码

NOIP2013___1">[NOIP2013 普及组] 表达式求值

通往洛谷的传送门

题目背景

NOIP2013 普及组 T2

题目描述

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

输入格式

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

输入数据保证这一行只有 0123456789+* 12 12 12 种字符。

输出格式

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

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

输入输出样例

输入 #1

1+1*3+4

输出 #1

8

输入 #2

1+1234567890*1

输出 #2

7891

输入 #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

1.简单做法

1.1.题意解析

    我们可以将这道题看成多个乘法算式的和,那么就很好做了。

    定义一个变量num,存储当前段的乘积。定义一个变量ans,存储答案。

    先读入第一个数。然后循环分别读取一个符号 t m p tmp tmp和一个数字 x x x,如果读入的符号是*,就用num*x。否则就ans+=numnum=x

注意:
1)要对最后的乘积段进行额外处理;
2)每一步都要对10000取模。

1.2.AC代码

#include<bits/stdc++.h>
using namespace std;
#define mod 10000 
int x,ans,num;//ans为答案,num为当前段乘积,x为当前数
char tmp;//计算符号 
int main()
{scanf("%d",&num);while(scanf("%c",&tmp)&&tmp!='\n'){scanf("%d",&x);if(tmp=='*')num=(num*x)%mod;//每一步都要对10000求余 else ans=(ans+num)%mod,num=x;}printf("%d",(ans+num)%mod);//计算最后的和return 0;
}

2.使用栈的做法

2.1.题意解析

    不会栈的同学可以先走一步了。

    和上面的做法类似,将所有的乘积段压入栈,最后统一取出求和。

2.2.AC代码

#include<bits/stdc++.h>
using namespace std;
#define mod 10000
int x,ans,num;//ans为答案,num为当前段乘积,x为当前数
char tmp;//计算符号
stack<int>s;
int main()
{scanf("%d",&num);while(scanf("%c",&tmp)&&tmp!='\n'){scanf("%d",&x);if(tmp=='*')num=(num*x)%mod;//每一步都要对10000求余 else s.push(num),num=x;}ans=num;while(!s.empty())ans=(ans+s.top())%mod,s.pop();printf("%d",ans%mod);//计算最后的和return 0;
}

【蓝胖子编程教育简介】
蓝胖子编程教育,是一家面向青少年的编程教育平台。平台为全国青少年提供最专业的编程教育服务,包括提供最新最详细的编程相关资讯、最专业的竞赛指导、最合理的课程规划等。本平台利用趣味性和互动性强的教学方式,旨在激发孩子们对编程的兴趣,培养他们的逻辑思维能力和创造力,让孩子们在轻松愉快的氛围中掌握编程知识,为未来科技人才的培养奠定坚实基础。

欢迎扫码关注蓝胖子编程教育
在这里插入图片描述


http://www.ppmy.cn/embedded/124802.html

相关文章

《OpenCV 计算机视觉》—— 视频背景建模

文章目录 一、背景建模的目的二、背景建模的方法三、背景建模的步骤四、注意事项五、代码实现 一、背景建模的目的 视频背景建模的主要目的是从视频序列中提取出静态背景&#xff0c;以便将动态的前景对象与静态的背景进行分离。这有助于进一步分析和处理视频内容&#xff0c;…

Arduino UNO R3自学笔记23 之 Arduino如何使用4511控制数码管?

注意:学习和写作过程中,部分资料搜集于互联网,如有侵权请联系删除。 前言:因为7段数码管控制需要用到7个IO,这会严重占用Arduino的IO口,因此我们采用现有IC来节省Arduino的IO口。 1.CD4511介绍 CD4511是一款用于驱动共阴极LED(数码管)显示器的BCD码-七段码译码器。它…

AMD发布首个AI小语言模型:6900亿token、推测解码提速3.88倍

AMD发布了自己的首个小语言模型(SLM)&#xff0c;名为“AMD-135M”。相比于越来越庞大的大语言模型(LLM)&#xff0c;它体积小巧&#xff0c;更加灵活&#xff0c;更有针对性&#xff0c;非常适合私密性、专业性很强的企业部署。 AMD-135小模型隶属于Llama家族&#xff0c;有两…

C++语言学习(9):《C++程序设计原理与实践》第四章笔记

这一章的标题是《计算》&#xff0c;想法是&#xff1a;计算是一个过程&#xff0c;是处理输入得到输出的过程。也有B站网友称之为 IPO 编程&#xff1a;Input, Process, Output. 其中 Process 相当于是广义上的「计算」。 计算过程的输入 如果认为程序是以计算为目的&#xf…

github命令行管理工具推荐

GitHub 管理工具推荐 背景 在使用 GitHub 管理仓库时&#xff0c;需要在 Web 端创建远程仓库&#xff0c;在本地创建本地仓库&#xff0c;然后再用 git remote add origin url 进行关联。这个过程相对繁琐&#xff0c;而且还有优化的空间。如果频繁创建仓库&#xff0c;就更能…

2024 Mysql基础与进阶操作系列之MySQL触发器详解(20)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]

欢迎各位彦祖与热巴畅游本人专栏与博客 你的三连是我最大的动力 以下图片仅代表专栏特色 [点击箭头指向的专栏名即可闪现] 专栏跑道一 ➡️ MYSQL REDIS Advance operation 专栏跑道二➡️ 24 Network Security -LJS ​ ​ ​ 专栏跑道三 ➡️HCIP&#xff1b;H3C-SE;CCIP——…

网约班车升级手机端退票

背景 作为老古董程序员&#xff0c;不&#xff0c;应该叫互联网人员&#xff0c;因为我现在做的所有的事情&#xff0c;都是处于爱好&#xff0c;更多的时间是在和各行各业的朋友聊市场&#xff0c;聊需求&#xff0c;聊怎么通过IT互联网 改变实体行业的现状&#xff0c;准确的…

初始爬虫12(反爬与反反爬)

学到这里&#xff0c;已经可以开始实战项目了&#xff0c;多去爬虫&#xff0c;了解熟悉反爬&#xff0c;然后自己总结出一套方法怎么做。 1.服务器反爬的原因 服务器反爬的原因 总结&#xff1a; 1.爬虫占总PV较高&#xff0c;浪费资源 2.资源被批量抓走&#xff0c;丧失竞争力…