MT3034 算术招亲

news/2024/9/23 11:14:41/

跟MT3033新的表达式类似,只多了一个括号合法性的判断

#include <bits/stdc++.h>
using namespace std;
const int N = 40;
bool tag[N];
bool is_op(char c)
{return c == '+' || c == '-' || c == '*' || c == '/' || c == '^';
}
int priority(char op)
{ // 优先级排序if (op == '+' || op == '-')return 1;if (op == '*' || op == '/')return 2;if (op == '^')return 3;return -1;
}
void process_op(stack<int> &st, char op)
{int r = st.top();st.pop();int l = st.top();st.pop();switch (op){case '+':st.push(l + r);break;case '-':st.push(l - r);break;case '*':st.push(l * r);break;case '/':st.push(l / r);break;case '^':st.push(pow(l, r));break;}
}int evaluate(string &s)
{stack<int> st;stack<char> op;for (int i = 0; i < s.size(); i++){if (s[i] == '('){if (!tag[i]){continue; // 括号位置不合法}op.push(s[i]);}else if (s[i] == ')'){if (!tag[i]){continue; // 括号位置不合法}while (op.top() != '('){process_op(st, op.top());op.pop();}op.pop();}else if (is_op(s[i])){ // 运算符优先级while (!op.empty() && priority(op.top()) >= priority(s[i])){process_op(st, op.top());op.pop();}op.push(s[i]);}else{int num = 0;while (i < s.size() && isdigit(s[i])){num = num * 10 + s[i] - '0';i++;}i--;st.push(num);}}while (!op.empty()){process_op(st, op.top());op.pop();}return st.top();
}void init(string &s)
{ // 去除多余的括号stack<pair<char, int>> st;for (int i = 0; i < s.size(); i++){if (!st.empty() && st.top().first == '(' && s[i] == ')'){                                         // 如果栈顶为(并且当前遍历到了(  --> 合法tag[i] = tag[st.top().second] = true; // 两个位置为true 即括号位置合法st.pop();                             // 合法的(弹出}else if (s[i] == '(') // 记录(位置{st.push({'(', i});}}
}int main()
{string s;cin >> s;init(s);cout << evaluate(s);return 0;
}

http://www.ppmy.cn/news/1458022.html

相关文章

移动端自动化测试工具 Appium 之元素操作小技巧

文章目录 一、背景二、TestNG常用注解三、实战3.1、集成启动类3.2、采用xpath定位元素3.3、编写通用判断类3.4、编写测试类3.5、遍历实现 四、总结 一、背景 appium自动化工作中&#xff0c;元素操作最常用的就是Id/xpath&#xff0c;因为【appium1.5.0后&#xff0c;不支持使…

C++Linux系统编程——Linux基本命令(究极全)

1.Linux常见目录介绍 /&#xff1a;根目录&#xff0c;一般根目录下只存放目录&#xff0c;在Linux下有且只有一个根目录。所有的东西都是从这里开始。当你在终端里输入“/home”&#xff0c;你其实是在告诉电脑&#xff0c;先从/&#xff08;根目录&#xff09;开始&#xff0…

分布式关系型数据库管理系统 OceanBase 安装和配置教程

&#x1f30a; 分布式关系型数据库管理系统 OceanBase 安装和配置教程 &#x1f680; 博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝…

银河麒麟QT项目打包详细教程

银河麒麟QT项目打包详细教程 一、QT项目打包 下载linuxdeployqt&#xff0c;下载地址&#xff1a;https://github.com/probonopd/linuxdeployqt/releases 安装Linuxdeployqt 2.1 为了安装方便&#xff0c;将下载下来的文件名称改短些 mv linuxdeployqt-6-x86_64.AppImage lin…

醛固酮(Aldosterone)/Aldosterone ELISA kit--比色竞争法酶免疫检测试剂盒

醛固酮&#xff08;Aldosterone&#xff09;是一种由肾上腺皮质中的胆固醇合成的类固醇激素。醛固酮在肾脏和肝脏中代谢&#xff0c;并作为控制钠钾平衡的关键盐皮质激素发挥作用。肾上腺合成和释放醛固酮主要受肾素-血管紧张素-醛固酮系统&#xff08;RAAS&#xff09;的调节&…

Isaac Sim 3(学习笔记5.8)

Isaac Sim 利用深度学习获取mask掩码图 参考内容 Kubernetes官网 在 Linux 系统中安装并设置 kubectl | Kubernetes准备开始 kubectl 版本和集群版本之间的差异必须在一个小版本号内。 例如&#xff1a;v1.30 版本的客户端能与 v1.29、 v1.30 和 v1.31 版本的控制面通信。 用…

微信在线投票送礼物票选小程序源码系统 带完整的安装代码包以及安装搭建教程

在数字化时代&#xff0c;互动与参与成为吸引用户的关键。为了满足广大用户对于在线投票和礼物赠送的需求&#xff0c;我们特别推出了这款微信在线投票送礼物票选小程序源码系统。该系统不仅提供完整的安装代码包&#xff0c;还附带详细的安装搭建教程&#xff0c;让用户轻松搭…

韩国站群服务器如何提升网站性能与用户体验?

韩国站群服务器如何提升网站性能与用户体验? 在当今数字化时代&#xff0c;网站性能和用户体验对于吸引和保留用户至关重要。为了提供快速、稳定和优质的服务&#xff0c;越来越多的网站管理员开始利用韩国站群服务器来优化其网站性能。本文将探讨如何利用韩国站群服务器来提…