题前废话:

咱也不知道咱写了个什么神奇的代码导致_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-

最新文章

  1. rails程序文件名命名规范
  2. 一个sendMessage
  3. Android入门(七)碎片的生命周期与限定符
  4. 新手接触java
  5. 如何进行oracle capability i/o(压力测试数据库服务器i/o性能)
  6. 005windows与Linux文件共享
  7. [sql server] 如何阻止SELECT * 语句
  8. Python之路Day17
  9. ORA-01207: file is more recent than control file - old control file的处理方法
  10. Redis 学习笔记3:Jedis 连接虚拟机下的Redis 服务
  11. 走进Java中的持有对象(容器类)之一 容器分类
  12. tensorflow 源码编译
  13. MinFilter(MaxFilter)快速算法C++实现
  14. vsftpd安装配置以及常见问题解决
  15. Flask消息闪现
  16. Maven使用deploy上传jar包到远程库
  17. 寻找高边电流IC
  18. 【写在NOIP前】
  19. urlparse模块(专门用来解析URL格式)
  20. # 20155327 2016-20017-3 《Java程序设计》第3周学习总结

热门文章

  1. fs.mkdir
  2. 双层for循环用java中的stream流来实现
  3. java调用存储过程的方式
  4. 触发器insert
  5. 改变icon方向
  6. volley简介
  7. 如何快速优雅的解决:ORA-02290: 违反检查约束条件 异常问题
  8. [CSP-S模拟测试]:e(树上主席树)
  9. Python 学习笔记(基础语法 restful 、 Flask 和 Requests)
  10. C#异常日志