【洛谷p1981】表达式求值
题前废话:
咱也不知道咱写了个什么神奇的代码导致_rqy都看不明白它是怎么re掉的,
代码的大致思路是这样的:对于这样一个中缀表达式,先转化成它的后缀表达式的形式,然后利用P1449 后缀表达式 这道题的solution来求解这个式子,但是咱也不知道为啥咱也找不出来为啥,它的所有语句都是可以正常执行的,最后答案也求出来显示出来了,然后它就停止运行了呢???甚至于return 0(main函数中的)都可以执行呢qwq
贴一下代码吧,希望大佬们帮忙看一看啊qwq:
#include<bits/stdc++.h> using namespace std; int cnt,x,b,c,num;
string a,d;
stack<char> s1;
stack<long long> s; int main(){
cin>>a;
int len=a.size();
for(int i=;i<len;i++){
if(a[i]>=''&&a[i]<=''){
d[cnt++]=a[i];
}
else {
if(a[i]=='+'||a[i]=='-'||a[i]=='*'){
char f=s1.top();
d[cnt++]='.';
if((a[i]=='+'||a[i]=='-')&&(f=='*')){
d[cnt++]=f;
s1.pop();
}
s1.push(a[i]);
}
}
}
d[cnt++]='.';
while(!s1.empty()){
d[cnt++]=s1.top();
s1.pop();
}
for(int i=;i<cnt;i++){
if(d[i]=='+'){x=s.top();s.pop();b=s.top();s.pop();c=x+b;s.push(c);}
if(d[i]=='-'){x=s.top();s.pop();b=s.top();s.pop();c=b-x;s.push(c);}
if(d[i]=='*'){x=s.top();s.pop();b=s.top();s.pop();c=x*b;s.push(c);}
if(d[i]>=''&&d[i]<=''){
num*=;
num+=(d[i]-'');
}
if(d[i]=='.'&&num!=) {
s.push(num);
num=;
}
}
cout<<s.top()%;
}
好啦接下来是是正解:
SOLUTION:
首先这个读入就非常神奇啦诶:先读入一个数字(显然这个表达式只有数字和运算符号(+*)没题目描述没有-哦),然后读入就很神奇:
cin>>a;//先读入一个数字
a%=;
while(ch!='\n'){
ch=getchar();//然后读入运算符
if(ch=='\n') break;//当读入的运算符是空格,显然读入完成了,break掉;
cin>>b;
然后是思路:
首先也像转后缀表达式一样,建立一个stack(直接用stl了比较好写(不会手写)),将数字入栈,这里的操作是:如果读入的操作符是‘*’,那么将一个元素出栈,然后接下来会继续读入一个数字b嘛,将a*b%mod的值再放进栈中,这样只要是在栈中的数就只会进行加法运算而不会进行乘法运算,这样就保证了优先级;
最后把栈中所有的元素取出相加即为答案
CODE:
#include<bits/stdc++.h> using namespace std; long long a,b,ans;
char ch;
stack<long long> s; int main(){
cin>>a;
a%=;
s.push(a);
while(ch!='\n'){
ch=getchar();
if(ch=='\n') break;
cin>>b;
if(ch=='*'){
a=s.top();
s.pop();
s.push(a*b%);
}
else s.push(b);
}
while(s.size()){
ans=(ans+s.top())%;
s.pop();
}
cout<<ans%<<endl;
}
end-
【洛谷p1981】表达式求值的更多相关文章
- 洛谷 P1981 表达式求值
P1981 表达式求值 题目描述 给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值. 输入输出格式 输入格式: 输入文件为 expr.in. 输入仅有一行,为需要你计算的表达式,表达式中只 ...
- 题解-洛谷P1981 表达式求值(模拟+处理优先级的递归)
https://www.luogu.org/problemnew/show/P1981 (原题链接) 显然乘法的优先级高与加法,因此碰到乘号就要优先把一连串与乘号相连的数算出,很容易想到递归.可用普通 ...
- 洛谷P1981 表达式求值 题解 栈/中缀转后缀
题目链接:https://www.luogu.org/problem/P1981 这道题目就是一道简化的中缀转后缀,因为这里比较简单,只有加号(+)和乘号(*),所以我们只需要开一个存放数值的栈就可以 ...
- 洛谷 P1981 表达式求值(模拟)
嗯... 题目链接:https://www.luogu.org/problem/P1981 这道题其实是数组模拟栈.首先处理乘法:注意从后往前处理,处理后归零.然后把数都加起来即可. AC代码: #i ...
- 洛谷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 本题涉及算法:栈.前缀表达式转后缀表达式,动态规划思想. 这道题目我思考了好长时间,第一时间让我做的话我也做不出来. ...
- 洛谷 P1310 表达式的值 解题报告
P1310 表达式的值 题目描述 对于1 位二进制变量定义两种运算: 运算的优先级是: 先计算括号内的,再计算括号外的. "× "运算优先于"⊕"运算,即计算表 ...
- 洛谷P1310 表达式的值
P1310 表达式的值 题目描述 对于1 位二进制变量定义两种运算: 运算的优先级是: 先计算括号内的,再计算括号外的. “× ”运算优先于“⊕”运算,即计算表达式时,先计算× 运算,再计算⊕运算.例 ...
随机推荐
- curl 详解
本人qq群也有许多的技术文档,希望可以为你提供一些帮助(非技术的勿加). QQ群: 281442983 (点击链接加入群:http://jq.qq.com/?_wv=1027&k=29Lo ...
- 【串线篇】spring boot嵌入式Servlet容器自动配置原理
EmbeddedServletContainerAutoConfiguration:嵌入式的Servlet容器自动配置? @AutoConfigureOrder(Ordered.HIGHEST_PREC ...
- java8 时间日期操作包总结
- ubuntu16.04 安装mysql
安装mysql 1.sudo apt-get install mysql-server 2.sudo apt install mysql-client 3.sudo apt install libmy ...
- v-if 和 v-show
关于条件渲染 所谓条件渲染,就是根据不同的条件,使用不同的模板来生成 html. 在 Vue.js 中,使用 v-if 和 v-show 指令来控制条件渲染. 区别 v-show 会在app初始化的时 ...
- python-*args、**kargs用法
可变位置参数: *args:是一个元组,传入的参数会被放进元组里.可变关键字参数: **kwargs:是一个字典,传入的参数以键值对的形式存放到字典里. def test1(*args): print ...
- mysql DEFAULT约束 语法
mysql DEFAULT约束 语法 作用:用于向列中插入默认值. 说明:如果没有规定其他的值,那么会将默认值添加到所有的新记录.直线电机 mysql DEFAULT约束 示例 //在 "P ...
- 超大文件上传方案(ASP.NET)
ASP.NET上传文件用FileUpLoad就可以,但是对文件夹的操作却不能用FileUpLoad来实现. 下面这个示例便是使用ASP.NET来实现上传文件夹并对文件夹进行压缩以及解压. ASP.NE ...
- VS2019界面透明、主题修改和导出设置
目录 安装插件Color Theme Editor for Visual Studio 2019和ClaudiIDE 导入主题 背景修改 效果预览 导出设置遇到错误924 其他帮助文档 我自己用的主题 ...
- 爬虫小例1:ajax形式的网页数据的抓取
---恢复内容开始--- 下面记录如何抓取ajax形式加载的网页数据: 目标:获取“https://movie.douban.com/typerank?type_name=%E5%89%A7%E6%8 ...