当前位置: 首页 > news >正文

PTA后缀式求值(整型版)

作者 周强

单位 青岛大学

我们人类习惯于书写“中缀式”,如 3 + 5 * 2 ,其值为13。 (p.s. 为什么人类习惯中缀式呢?是因为中缀式比后缀式好用么?)

而计算机更加习惯“后缀式”(也叫“逆波兰式”,Reverse Polish Notation)。上述中缀式对应的后缀式是: 3 5 2 * +

现在,请对输入的后缀式进行求值。为了简化输入处理和运算,运算数(操作数)不超过30个且均为不超过5位的正整数,运算符(操作符)仅有+ - * /(加减乘除)四种。题目保证运算的中间结果和最终结果都在整型范围内,且不会出现除数为0的情况

输入格式:

第一行给出一个不超过10的正整数k;

接下来k行,每行给出一个后缀式,以=号结束,运算符、运算数和=号之间均以一个空格间隔。

输出格式:

输出有k行,对于所输入的每个后缀式,判断是否正确(可求值),并在一行里输出:

  • 如果后缀式无误、可求值,输出结果
  • 如果后缀式错误,则输出Expression Error!

输入样例1:

2
1 2 3 4 + - * =
10 2 3 + / 4 * 5 - =

输出样例1:

-5
3

输入样例2:

2
10 2 / =
10 2 + - =

输出样例2:

5
Expression Error!

注意点:

1、后缀有符号时,单调栈里面至少需要有两个数 。

2、在最后读到等号时,栈里面只能有一个数字。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define endl "\n"stack<ll>st;//单调栈 
string s;//读取字符 void solve(){ll x,y;bool f=1;//判断是否有1违法状态 while(!st.empty())st.pop();//清空栈 while(cin >> s){if(s == "=")break;//读入结束 if(!f)continue;if(s[0] >= '0' && s[0] <= '9'){//题目保证没有负数 x=stol(s);}else{if(!st.empty())y=st.top(),st.pop();else f=0;if(!st.empty())x=st.top(),st.pop();else f=0;if(!f)continue;if(s == "*")x*=y;if(s == "/")x/=y;if(s == "-")x-=y;if(s == "+")x+=y;}st.push(x);}if(f && st.size() == 1)cout << st.top() << endl;else cout << "Expression Error!" << endl;return;
}int main(){ll t=1;cin >> t;while(t--)solve();return 0;
}

http://www.lryc.cn/news/324317.html

相关文章:

  • FPGA与以太网相关接口知识
  • 使用git+ssh访问github,避免下载资源失败
  • cookie、session和token的区别
  • 如何解决Layui后台接口返回数据,但是table.render不渲染表格数据的问题
  • matlab 将矩阵写入文件
  • pandas的综合练习
  • 北京中科富海低温科技有限公司确认出席2024第三届中国氢能国际峰会
  • 非插件方式为wordpress添加一个额外的编辑器
  • Spark Stage
  • 【国家计算机二级考试C语言.2024】学习备忘录
  • 十分钟掌握redis精髓指令
  • 突然断电导致git损坏修复
  • MATLAB入门指南:从零开始进行数学建模竞赛
  • 【JavaEE初阶系列】——带你了解volatile关键字以及wait()和notify()两方法背后的原理
  • GitHub配置SSH Key(详细版本)
  • JavaScript 权威指南第七版(GPT 重译)(六)
  • Learning to summarize from human feedback
  • 数据库迁移测试
  • ASP .Net Core ILogger日志服务
  • LeetCode 2657.找到两个数组的前缀公共数组
  • 【jvm】jinfo使用
  • C++ Thread 源码 观后 自我感悟 整理
  • 2024阿里云2核2G服务器租用价格99元和61元一年
  • 刚刚!奥特曼剧透GPT-5,将在高级推理功能上实现重大进步
  • uniapp使用Canvas给图片加水印把临时文件上传到服务器
  • 小希的迷宫
  • MySQL索引剖析【了解背后的数据结构】
  • 004——内存映射(基于鸿蒙和I.MAX6ULL)
  • 150 Linux C++ 通讯架构实战6 服务器程序目录规划,makefile编写
  • OpenCV支持哪些类型的文件格式读写?