题解-洛谷P1981 表达式求值(模拟+处理优先级的递归)
https://www.luogu.org/problemnew/show/P1981
(原题链接)
显然乘法的优先级高与加法,因此碰到乘号就要优先把一连串与乘号相连的数算出,很容易想到递归。可用普通的“从头扫到尾”的方法,以加号、乘号、及字符串尾的结束符(‘\0’)为间隔读入数字(因结尾没有符号,所以别忘了若不特别处理结尾,循环过完后会不处理最后读入的数)。
因数据会很大,题目善良的说“注意:当答案长度多于 4 位时,请只输出最后4 位,前导0 不输出”,有了这句话,我们的运算就只有后四位有关了(无论是加法还是乘法,能影响结果后四位的只有加数或因数的后四位),因此我们可以忽略第五位以后,即每次运算后都%10000。但就算2个数都小于10000,它们的和或积也有可能超过10000,因此在最后的结果别忘了再%10000。需用文件的同学最后也别忘了加上(或去掉)双斜线。
上代码:
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
string suanshi;
int l,total=,g,i;
long long a[];
long long chengfa()
{
i++;
for(;i<=l;i++)
{
if(suanshi[i]>=''&&suanshi[i]<='')
a[g]=(a[g]*+suanshi[i]-'')%;
else
if(suanshi[i]=='+'||suanshi[i]=='\0')
{
g++;
return a[g-];
}
else
if(suanshi[i]=='*')
{
g++;
return a[g-]*chengfa()%;
}
}
}
int main()
{
cin>>suanshi;
l=suanshi.length();
g=;
for(i=;i<=l;++i)
{
if(suanshi[i]>=''&&suanshi[i]<='') a[g]=a[g]*+suanshi[i]-'';
else if(suanshi[i]=='+'||suanshi[i]=='\0')
{
total=(total+a[g]%)%;
g++;
}
else
if(suanshi[i]=='*')
{
g++;
total=total+a[g-]*chengfa()%;
}
}
cout<<total%;
return ;
}
题解-洛谷P1981 表达式求值(模拟+处理优先级的递归)的更多相关文章
- 洛谷 P1981 表达式求值
P1981 表达式求值 题目描述 给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值. 输入输出格式 输入格式: 输入文件为 expr.in. 输入仅有一行,为需要你计算的表达式,表达式中只 ...
- 洛谷 P1981 表达式求值(模拟)
嗯... 题目链接:https://www.luogu.org/problem/P1981 这道题其实是数组模拟栈.首先处理乘法:注意从后往前处理,处理后归零.然后把数都加起来即可. AC代码: #i ...
- 洛谷P1981 表达式求值 题解 栈/中缀转后缀
题目链接:https://www.luogu.org/problem/P1981 这道题目就是一道简化的中缀转后缀,因为这里比较简单,只有加号(+)和乘号(*),所以我们只需要开一个存放数值的栈就可以 ...
- 洛谷p1981 表达式求值
#include <iostream> #include <cstdio> #include <cstring> using namespace std; char ...
- P1981 表达式求值
P1981 表达式求值 题解 这个题联想一下 P1310 表达式的值 思路就是输入中缀式,转成后缀式,然后按后缀式计算,完美!! but!! 会严重RE,因为你可能会输入中缀式的时候输 ...
- 2019.06.17课件:[洛谷P1310]表达式的值 题解
P1310 表达式的值 题目描述 给你一个带括号的布尔表达式,其中+表示或操作|,*表示与操作&,先算*再算+.但是待操作的数字(布尔值)不输入. 求能使最终整个式子的值为0的方案数. 题外话 ...
- 洛谷P1310 表达式的值 题解 栈/后缀表达式的应用
题目链接:https://www.luogu.org/problem/P1310 本题涉及算法:栈.前缀表达式转后缀表达式,动态规划思想. 这道题目我思考了好长时间,第一时间让我做的话我也做不出来. ...
- 【数据结构】P1981 表达式求值
题目描述 给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值. 输入格式 一行,为需要你计算的表达式,表达式中只包含数字.加法运算符“++”和乘法运算符“×”,且没有括号,所有参与运算的数字 ...
- 洛谷 P1310 表达式的值 解题报告
P1310 表达式的值 题目描述 对于1 位二进制变量定义两种运算: 运算的优先级是: 先计算括号内的,再计算括号外的. "× "运算优先于"⊕"运算,即计算表 ...
随机推荐
- Android 轮播图Banner切换图片的效果
Android XBanner使用详解 2018年03月14日 08:19:59 AND_Devil 阅读数:910 版权声明:本文为博主原创文章,未经博主允许不得转载. https://www. ...
- MongoDB 3.6版本关于bind_ip设置
2017年下半年新发布的MongoDB 3.6版本在安全性上做了很大提升,主要归结为两点: 1.将将bind_ip 默认值修改为了localhost: 2. 在db.createUser()和 db. ...
- 理解ECS的概念和Unity中的ECS设计
组合优于继承 ecs的概念很早就有了,最初的主要目的应该还是为了改善设计. e-c-s三者都有其意义,e-c是组合优于继承,主要用以改善oo的继承耦合过重以及多继承菱形问题. oop常见设计里,每个g ...
- DWH中增量数据的抽取
1. Truncate-Load 全量加载 简单直观.不易出错,适合数据量不太大的操作 性能问题 2. Increamental-Load 只考虑新增.修改.删除的记录 良好的数据源设计(主要是 ...
- Python基础——4高阶函数
高阶函数 函数本身可用变量指向,把变量当做函数参数的函数成为高阶函数 map and reduce map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每 ...
- Spark RDD持久化、广播变量和累加器
Spark RDD持久化 RDD持久化工作原理 Spark非常重要的一个功能特性就是可以将RDD持久化在内存中.当对RDD执行持久化操作时,每个节点都会将自己操作的RDD的partition持久化到内 ...
- Vue项目分环境打包的实现步骤
转:https://blog.csdn.net/xinzi11243094/article/details/80521878 方法一:亲测真的有效 在项目开发中,我们的项目一般分为开发版.测试版.Pr ...
- day9-基础函数的学习(四)
这几天一直赶着写写作业,博客的书写又落下了,要加油鸭,开写 今日份目录 1.内置函数 2.递归函数 开始今日份总结 1.内置函数 内置函数就是python内部包含的函数,总计有68种,不过有些事真的天 ...
- find mtime参数+号,-号,不带符号的用法
find . -mtime +0 -type f -name "oms*" | xargs rm -f 删除24小时以前 oms格式的文件 #按文件更改时间来查找文件,- ...
- .net core 的图片处理及二维码的生成及解析
写代码这事,掐指算来已经十有余年. 从html到css到javascript到vbscript到c#,从兴趣到职业,生活总是失落与惊喜并存. 绝大部分时候,出发并不是因为知道该到哪里去,只是知道不能再 ...