当前位置:首页 > 复赛 > 正文内容

NOIP2013年普及组T2 表达式求值

亿万年的星光5年前 (2021-01-28)复赛16420

【题目描述】

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

【输入描述】

输入仅有一行,为需要你计算的表达式,表达式中只包含数字、加法运算符“+”和乘法运算符“∗”,且没有括号,所有参与运算的数字均为 0到 2311 之间的整数。输入数据保证这一行只有 0∼9、+、∗这 12 种字符。

【输出描述】

输出只有一行,包含一个整数,表示这个表达式的值。注意:当答案长度多于 4 位时,请只输出最后 4 位,前导 0 不输出。

【输入样例1】

1+1*3+4

【输出样例1】

8

【输入样例2】

1+1234567890*1

【输出样例2】

7891

【输入样例3】

1+1000000003*1

【输出样例3】

4

【样例说明】

样例 1 计算的结果为 8,直接输出 8。

样例 2 计算的结果为 123456789,输出后 4位,即 7891。

样例 3 计算的结果为 1000000004,输出后 4 位,即 4。

【数据范围】

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

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

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

【分析】

1.题目中已经告知,输入的数据只包含0~9,“+”和“*”这几个字符,也就是不用考虑其他特殊字符了。而且表达式中没有括号,减少了不少难度。

2.加号和乘号有优先级问题,加号在前乘号在后

3.比较麻烦的一点是当答案长度多于 4 位时,请只输出最后 4 位,前导 0 不输出。这个操作直接 模10000即可。

4. 本题所有参与数据的数字都在0~2311范围内,int的范围231,10位数,遇到乘法和加法会超范围,如果要做运算的话建议用long long

5.题目要求输出表达式的值,换句话说,题目的输入数据应该是保证有解的,不会出现 “1++1024”这样的表达式。

【解题思路1】

由于题目描述的过程是一个比较规律的过程,一个数字一个符号,直到最后读不到为止,那么实际上这个过程只有加法和乘法,我们可以每次遇到“+”的符号就把前面的累计求和,遇到“*”的符号就先乘再求和,加法用来加每次的乘积。这样功能就比较好划分了。

【参考代码1】

#include<cstdio>
#include<iostream>
using namespace std;

int sum=0,num,tmp;  //定义和,要操作的数,临时数 
int main()
{
	char op;  //定义操作符 
	scanf("%d",&num);  //首先读入一个数字,之后就是一个符号和一个数字的格式
	while(scanf("%c",&op) && op !='\n')   //没有遇到回车符就继续读入
	{
		scanf("%d",&tmp);  //读入第二个数,根据上面的符号进行下面的操作
		if(op == '+')
		{
			sum=(sum+num)%10000; //遇到加号就加上上一段的值, 
			num=tmp;  //将每次读入的数 赋值给num 
		}
		else //除了加号就是乘号 
		{
			num=(num*tmp)%10000;  //遇到乘号先把两个数乘起来 
		}
	} 
	sum=(sum+num)%10000; //因为我们每次都是先读取符号再操作上一步的值,所以要加上最后一步操作的值。 
	printf("%d",sum);
	
	return 0; 
}


扫描二维码推送至手机访问。

版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

分享给朋友:

相关文章

NOIP2008年普及组 T2 排座椅

NOIP2008年普及组 T2 排座椅

【问题描述】上课的时候总有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情。不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同学上课时会交头接耳。同学...

NOIP2009年普及组 T2 分数线划定

【题目描述】世博会志愿者的选拔工作正在A市如火如荼的进行。为了选拔最合适的人才,A市对所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试。面试分数线根据计划录取人数的150%划定,即如...

NOIP2014年普及组 T2 比例简化

【题目描述】在社交媒体上,经常会看到针对某一个观点同意与否的民意调查以及结果。例如,对某一观点表示支持的有 1498 人,反对的有 902 人,那么赞同与反对的比例可以简单的记为1498:902。不过...

NOIP2016年普及组 T2 回文日期

【题目描述】日常生活中,通过年、月、日这三个要素可以表示出一个唯一确定的日期。牛牛习惯用8位数字表示一个日期,其中,前4位代表年份,接下来2位代表月份,最后2位代表日期。显然:一个日期只有一种表示方法...

NOIP2018 T2 龙虎斗

NOIP2018 T2 龙虎斗

【题目描述】轩轩和凯凯正在玩一款叫《龙虎斗》的游戏,游戏的棋盘是一条线段,线段上有n个兵营(自左至右编号1∼n),相邻编号的兵营之间相隔 1 厘米,即棋盘为长度为n−1厘米的线段。...

noiLinux中编程工具的使用

noiLinux中编程工具的使用

0.前言NOIP考试中,最终的程序要在noilinux中运行,以noilinux为准,但是有些省份做题基本就是DEVC++,有些细微的差别如果老师没讲过非常容易在考试中爆零。1.编程工具的选择关于no...