MT3034 算术招亲

跟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.hqwc.cn/news/681256.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据传输且不想布线时,如何实时传输数据?

在数字化转型的时代背景下&#xff0c;企业对数据传输的效率和安全性要求日益增加。过去&#xff0c;有线数据传输方式曾一度是企业网络建设的主流选择&#xff0c;但在当今的商业环境中&#xff0c;其局限性逐渐显现。本文将深入剖析传统有线数据传输的不足&#xff0c;并对比…

使用WPF中的Trigger实现按钮样式动态更改

使用WPF中的Trigger实现按钮样式动态更改 在Windows Presentation Foundation (WPF)中&#xff0c;Trigger 是一种强大的机制&#xff0c;它可以基于控件的属性值来动态更改控件的样式。这篇博客将介绍如何使用Trigger实现按钮在鼠标悬停时样式动态更改的效果。我们将详细讨论为…

Javaweb第五次作业

poet数据库sql语言 create table poet(id int unsigned primary key auto_increment comment ID,name varchar(10) not null comment 姓名,gender tinyint unsigned not null comment 性别, 说明: 1 男, 2 女,dynasty varchar(10) not null comment朝代,title varchar(20) not…

TypeScript 基础学习笔记:泛型 <T> vs 断言 as

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 TypeScript 基础学习笔记&#xff1a;泛型 <T> vs 断言 as&#x1f525; 引言&#x1f9e9; 泛型 <T>&#xff1a;灵活多变的类型容器示例&#xff1a;一个简单的泛型函数 &#x1f3c6; 类型断言 as&#xff1…

2024蓝桥杯CTF writeUP--packet

根据流量分析&#xff0c;我们可以知道129是攻击机&#xff0c;128被留了php后门&#xff0c;129通过get请求来获得数据 129请求ls Respons在这 里面有flag文件 这里请求打开flag文件&#xff0c;并以base64编码流传输回来 获得flag的base64的数据 然后解码 到手

Java:Servlet详解

目录 一、什么是Servlet 二、Servlet原理 Servlet的生命周期 三、 Servlet注释 WebServlet 一、什么是Servlet Servlet是JavaWeb开发的一种技术&#xff0c;Servlet程序需要部署在Servlet容器&#xff08;服务端&#xff09;中才能运行&#xff0c;常见的Servlet容器有Tom…

Oracle 23ai rpm安装配置及问题处理

1.安装介质下载 Oracle 23ai 免费版本已经正式发布&#xff0c;Oracle官网提供免费的下载试用&#xff08;无需账号&#xff09;地址如下 官网下载和试用地址 Oracle Database 23ai Free&#xff1a; https://www.oracle.com/database/free/get-started 三种安装方式可选…

Ansible-inventory和playbook

文章目录 一、inventory 主机清单1、列表表示2、inventory 中的变量3、变量3.1 主机变量3.2 组变量3.3 组嵌套 二、playbook剧本1、playbook的组成2、编写剧本2.1 剧本制作2.2 准备nginx.conf2.3 运行剧本2.4 查看webservers服务器2.5 补充参数 3、剧本定义、引用变量3.1 剧本制…

mysql中varchar与bigint直接比较会导致精度丢失以至于匹配到多行数据

在mysql中&#xff0c;我们都知道如果一个索引字段使用了函数或者计算那么查询的时候索引会失效&#xff0c;可是我相信在联表的时候我们只会关注两个表关联字段是否都创建了索引&#xff0c;却没有关注过这两个字段的类型是否一致&#xff0c;如果不一致的话索引是会失效的&am…

解决html2canvas生成图片慢的问题

// 主要看那个点击事件就行 <divclass"textBox-right-board-group"v-for"item in screenList":key"item.id"><!-- 获取不同分辨率下的屏幕的展示的文字大小DPI&#xff1a; fontSize: getFontSize(item.resolutionRatio), --><di…

NTP网络时间服务器如何实现煤矿智能化管理?

随着煤矿行业的不断发展&#xff0c;安全生产和效率是煤矿企业始终关注的重点。NTP网络时间服务器作为一种高精度的时间同步技术&#xff0c;其应用在煤矿领域也逐渐得到广泛推广。 ZRBG1000 NTP网络时间服务器是对煤矿等行业对网络时间同步应用需求设计的高准确度、高性能NTP网…

买入期权是什么意思?

今天期权懂带你了解买入期权是什么意思&#xff1f;买入期权&#xff1a;也称看涨期权。一种赋予其持有者以特定的价格、在特定的到期日当天或之前买入某种资产的权力的金融工具。 买入期权是什么意思&#xff1f; 买入期权也称看涨期权。即赋予其持有者在到期日或到期日之前按…