news 2026/5/8 4:01:41

【ACWing】151. 表达式计算4

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【ACWing】151. 表达式计算4

题目地址:

https://www.acwing.com/problem/content/description/153/

给出一个表达式,其中运算符仅包含+,-,*,/,^(加 减 乘 整除 乘方)要求求出表达式的最终值。
数据可能会出现括号情况,还有可能出现多余括号情况。
数据保证不会出现大于或等于2 31 2^{31}231的答案。
数据可能会出现负数情况。
数据保证不会出现指数为负数的情况。
数据保证指数运算不会连续出现,例如2^2^3

输入格式:
输入仅一行,即为表达式。

输出格式:
输出仅一行,既为表达式算出的结果。

可以用双栈的方法来做。这道题有很多需要注意的点:

  1. 为了让栈里最后只剩下一个数,而不是出了循环还要继续做运算,我们可以用一对小括号把输入包起来;
  2. 为了使得括号平衡,我们需要预处理一下,补齐缺失的括号;
  3. 需要额外处理减号作为负号的情形。减号应该被当成负号,当且仅当,其之前的字符不是数字也不是左括号;如果负号之后是左括号,我们需要将-(变成-1*(,这样好处理,即符号栈加入*,数字栈加入-1;如果负号之后是数字,我们直接将数字截取出来即可。

代码如下:

#include<iostream>#include<stack>usingnamespacestd;usingll=longlong;string s;intmain(){ios::sync_with_stdio(false);cin.tie(nullptr);cin>>s;s='('+s+')';intl=0,r=0;for(charch:s){if(ch=='(')l++;elseif(ch==')')r++;}if(l>r)s=s+string(l-r,')');if(l<r)s=string(r-l,'(')+s;autof=[](charop){switch(op){case'(':return0;case'+':case'-':return1;case'*':case'/':return2;case'^':return3;default:return-1;}};stack<ll>stk;stack<char>ops;autocalc=[](auto&stk,auto&ops){charop=ops.top();ops.pop();if(op=='('||op==')')return;ll y=stk.top();stk.pop();ll x=stk.top();stk.pop();if(op=='+')stk.push(x+y);elseif(op=='-')stk.push(x-y);elseif(op=='*')stk.push(x*y);elseif(op=='/')stk.push(x/y);else{if(!x)stk.push(0);else{ll res=1;while(y){if(y&1)res*=x;y>>=1;x*=x;}stk.push(res);}}};for(inti=0;i<s.size();i++){charch=s[i];if(isdigit(ch)){intj=i;ll x=0;while(isdigit(s[j]))x=x*10+s[j++]-'0';i=j-1;stk.push(x);}elseif(ch=='(')ops.push('(');elseif(ch==')'){while(ops.top()!='(')calc(stk,ops);ops.pop();}elseif(ch=='-'&&i&&!isdigit(s[i-1])&&s[i-1]!=')'){if(s[i+1]=='('){stk.push(-1);ops.push('*');}else{intj=i+1;ll x=0;while(isdigit(s[j]))x=x*10+s[j++]-'0';stk.push(-x);i=j-1;}}else{while(f(ops.top())>=f(ch))calc(stk,ops);ops.push(ch);}}printf("%lld\n",stk.top());}

时空复杂度O ( n ) O(n)O(n)n nn为输入长度。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/2 18:40:42

自动化测试的三种核心模式:策略选择与实践洞察

在敏捷开发与DevOps实践成为主流的当下&#xff0c;自动化测试已成为保障软件质量、加速产品迭代的关键环节。据行业报告显示&#xff0c;实施有效自动化测试的团队产品发布周期平均缩短40%。本文将深入解析基于界面的录制回放、数据驱动测试与关键字驱动测试这三种主流自动化测…

作者头像 李华
网站建设 2026/5/4 6:03:36

AVL树要点急速过

AVL树一.概念:1.二叉搜索树2.所有子树高度差至多为13.左右子树都是AVL树4.空树也是AVL树二.特点1.有(或没有)平衡因子,平衡因子 右子树高度 - 左子树高度 1/ 0/ -12.两个logN:高度和时间复杂度3.高度平衡三.结构1.结点(AVLTreeNode):父母,左子树,右子树,平衡因子,值2.AVL树(A…

作者头像 李华
网站建设 2026/5/6 10:41:08

计算机毕业设计springboot基于微信小程序的学生公寓管理系统 基于微信小程序的 Spring Boot 学生公寓管理系统设计与实现 微信小程序驱动的 Spring Boot 学生公寓管理平台开发

计算机毕业设计springboot基于微信小程序的学生公寓管理系统qfj689&#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。 随着互联网技术的飞速发展&#xff0c;学生公寓管理逐渐从传…

作者头像 李华
网站建设 2026/5/7 10:51:49

趣味记忆法让背诵变轻松

还记得孩子昨晚背课文时那痛苦的小表情吗&#xff1f;明明半小时前才读过的古诗&#xff0c;到默写时却磕磕绊绊忘了一大半。当传统的死记硬背消耗着孩子对学习的热情&#xff0c;有一种方法正在悄悄改变这一切——在脑轻松学能中心&#xff0c;我们让记忆过程变得像搭积木一样…

作者头像 李华
网站建设 2026/5/5 12:58:39

通过算法备案之后就万事大吉了么?

在AI驱动产品体验的时代&#xff0c;算法早已不是后台的“黑盒”&#xff0c;而是直接影响用户权益、舆论走向甚至社会公平的“隐形决策者”。为规范算法应用&#xff0c;我国自2022年起全面推行算法备案制度。然而&#xff0c;不少企业误以为“完成备案合规通关”&#xff0c;…

作者头像 李华
网站建设 2026/5/6 10:57:23

破碎机远程监控及远程维护的数字化解决方案

行业背景近年来&#xff0c;随着我国工业化、城镇化进程的加速推进&#xff0c;砂石骨料作为混凝土及砂浆的关键基础材料&#xff0c;在建筑、交通、水利等基础设施建设领域得到了广泛应用。这一趋势为破碎筛分设备行业带来了前所未有的发展机遇&#xff0c;促使众多工厂向智能…

作者头像 李华