1356:计算(calc)

【算法分析】
解法1:中缀表达式直接求值
1、设数字栈、运算符栈。设数组表示运算符优先级,其中'('优先级最高,')'优先级最低。
从左向右扫描表达式字符串:
2、遇到数字时,入数字栈。
3、遇到运算符时,入栈条件为:栈空,或该运算符优先级比栈顶运算符优先级高,或者栈顶是'('。只有不满足该条件,则一直出栈。
      运算符出栈后,数字栈出栈两个数字,加上刚刚出栈的运算符进行一次运算,将运算结果加入数字栈。
      如果要入栈的是')'且栈顶是'(',那么二者配对,出栈运算符。否则运算符入栈。
4、扫描结束后若栈中有运算符,都出栈。
5、最后数字栈中的数字即为整个中缀表达式的运算结果
可以预先在字符串末尾加上一个优先级最低的')',以促使运算符栈中的运算符都出栈。

输入样例分析:1+(3+2)*(7^2+6*9)/(2)

【参考代码】

#include <bits/stdc++.h>
using namespace std;
int pri(char c)//返回c的优先级 
{
	switch(c)
	{
		case '(': return 5;
		case '^': return 4;
		case '*':
		case '/':
			return 3;
		case '+':
		case '-':
			return 2;
		case ')':
			return 1;
	}
}
int calc(int a, int b, char c)
{
	switch(c)
	{
		case '+':
			return a+b;
		case '-':
			return a-b;
		case '*':
			return a*b;
		case '/':
			return a/b;
		case '^':
			return pow(a, b);
	}
}
int main()
{
	stack<int> nStk;
	stack<char> cStk;
	int num = 0;
	bool isNum;
	string s;
	cin >> s;
	s.push_back(')');
	for(int i = 0; i < s.length(); ++i)
	{
		if(s[i] >= '0' && s[i] <= '9')
		{
			num = num*10+s[i]-'0';
			isNum = true;
		}
		else//s[i]是运算符 
		{
			if(isNum)
			{
				nStk.push(num);
				num = 0;
				isNum = false;		
			}
			while(!(cStk.empty() || pri(s[i]) > pri(cStk.top()) || cStk.top() == '('))
			{//不满足栈空,或该运算符优先级比栈顶运算符优先级高,或者栈顶是'('的条件就运算符栈出栈 
				int b = nStk.top();
				nStk.pop();
				int a = nStk.top();
				nStk.pop();
				nStk.push(calc(a, b, cStk.top()));
				cStk.pop();
			}
			if(!cStk.empty() && cStk.top() == '(' && s[i] == ')')//如果要入栈的是')'且栈顶是'(',那么二者配对,'('出栈
				cStk.pop();
			else
				cStk.push(s[i]);
		}
	} 
	cout << nStk.top();
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/456637.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

20240314一种各向同性负泊松比多孔材料的设计

Design of a porous material with isotropic negative Poisson’s ratio DOI&#xff1a;http://dx.doi.org/10.1016/j.mechmat.2016.02.012 摘要&#xff1a;本文提出了一种具有全方位负泊松比的二维多孔体的设计方法。孔隙的六边形周期性分布使力学性能&#xff08;泊松比…

计算机msvcr120.dll丢失怎样修复,教你5种方法轻松搞定

我们在玩游戏运行软件的时候&#xff0c;电脑系统提示无法启动此程序&#xff0c;因为计算机中丢失MSVCR120.dll&#xff0c;尝试重新安装该程序以解决此问题。究其原因&#xff0c;是由于在我们的计算机系统中&#xff0c;发现缺失了一个至关重要的动态链接库文件——MSVCR120…

国外visa卡怎么办理,可充ChatGPTPLUS、Claude、Midjourney

很多小伙都在使用ChatGPT&#xff0c;但是想充值ChatGPTPLUS缺需要国外的visa卡&#xff0c;拿自己的银联卡&#xff0c;尝试了好多次还是不行&#xff0c;其实用一张国外的visa卡几分钟就可以升级好 办理国外visa卡&#xff0c;点击获取 国外的visa卡&#xff0c;具体要看你…

rtsp流实现web端实时播放(海康+大华)

最近的电力项目需要嵌入海康摄像头画面&#xff0c;之前没有做过类似的流媒体播放&#xff0c;所以有些懵&#xff1b; 海康开放平台的webAPI&#xff0c;有插件还是无插件&#xff0c;都不适合自研web系统的嵌入&#xff0c;所以需要自己进行解流&#xff1b; 首先&#xff0c…

火山引擎VeDI:A/B实验如何应用在APP推荐系统中?

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 在移动互联网飞速发展的时代&#xff0c;用户规模和网络信息量呈现出爆炸式增长&#xff0c;信息过载加大了用户选择的难度&#xff0c;这样的背景下&#xff0c;推…

在IDE中配置tomcat服务器

目录 一、新建一个java项目二、添加web框架三、配置tomcat服务器四、运行访问发布的项目 前言&#xff1a;在 IntelliJ IDEA 中配置 Tomcat 服务器是 Java Web 开发的基础步骤&#xff0c;以下是如何在 IDEA 中设置 Tomcat 并部署 Web 项目的简要指南。 一、新建一个java项目 新…

Hadoop大数据应用:Linux 部署 MapReduce 与 Yarn

目录 一、实验 1.环境 2.Linux 部署 MapReduce 3.Linux 部署 Yarn 4.Linux 调用大数据集群分析数据 二、问题 1.hadoop 的启动和停止命令 2.HDFS 使用命令 一、实验 1.环境 &#xff08;1&#xff09;主机 表1 主机 主机架构软件版本IP备注hadoop NameNode &#xf…

在分布式环境中使用状态机支持数据的一致性

简介 在本文中&#xff0c;我们将介绍如何在分布式系统中使用transaction以及分布式系统中transaction的局限性。然后我们通过一个具体的例子&#xff0c;介绍了一种通过设计状态机来避免使用transaction的方法。 什么是数据库transaction Transaction是关系型数据普遍支持的…

【Ubuntu】gonme桌面的 gdm 和 lightdm 区别

总结&#xff1a;都可以 gdm: 【Gnome Display Manager】 完整&#xff0c;体积大 lightdm: 【Light Display Manager】 轻量

学习Java的第十天

本章来讲一下什么是字符串 一、什么是字符串 在Java中&#xff0c;最常见的基本类型就是字符串了&#xff0c;哪哪都能见到&#xff0c;如输入语句&#xff0c;输出语句等&#xff01;那么&#xff0c;什么是字符串呢&#xff0c;字符串就是String类&#xff0c;String类是Ja…

【Python】新手入门学习:详细介绍里氏替换原则(LSP)及其作用、代码示例

【Python】新手入门学习&#xff1a;详细介绍里氏替换原则&#xff08;LSP&#xff09;及其作用、代码示例 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyT…

颠覆传统!D 咖无人咖啡机再添新动作

D 咖无人咖啡机&#xff0c;作为国内领先的无人自助咖啡机品牌&#xff0c;一直以来都在不断创新和升级&#xff0c;以满足消费者日益增长的咖啡需求。近日&#xff0c;D 咖智能饮品机再添新动作&#xff0c;推出了一系列令人期待的新功能和服务&#xff0c;再次引领便捷咖啡新…

[MYSQL数据库]- 索引

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、认识索…

C#快速入门基础

本篇文章从最基础的C#编程开始学习&#xff0c;经过非常优秀的面向对象编程思想和方法的学习&#xff0c;为C#编程打下基础。 第 01 章 C#开发环境之VS使用和.NET平台基础 1.1 Visual Studio 开发环境 1.1.1 硬件环境 i5CPUi5CPU&#xff08;建议 4核 4线程或以上 &#xff0…

android 怎么自定义view

首先了解view的绘制流程: 所以onmeasure ---测量view onlayout---确定view大小----》所以继承ViewGroup必须要重写onlayout,确定子view 而onDraw----是继承view时候需要操作的。 所以:自定义ViewGroup一般是利用现有的组件根据特定的布局方式来组成新的组件。 自定义Vi…

计算机网络——计算机网络体系结构

计算机网络——计算机网络体系结构 计算机网络体系结构的由来正确认识分层协议与层次划分著名的几个体系结构OSI体系结构TCP/IP体系结构5层体系结构 我们今天来了解一下计算机网络体系结构&#xff1a; 计算机网络体系结构的由来 俗话说&#xff0c;“没有规矩&#xff0c;不…

Ele admin pro和iView Admin pro的用户管理页面对比

Ele admin pro和iView Admin pro都是非常优秀的B端框架&#xff0c;功能大同小异&#xff0c;本文就着重比对一下二者的用户案例页面&#xff0c;让老铁们感知一些细节。 一、用户列表 用户列表 用户列表 二、用户编辑 三、用户添加 四、角色管理 五、权限分配 六、角色添加

使用Python构建强大的网络爬虫

介绍 网络爬虫是从网站收集数据的强大技术&#xff0c;而Python是这项任务中最流行的语言之一。然而&#xff0c;构建一个强大的网络爬虫不仅仅涉及到获取网页并解析其HTML。在本文中&#xff0c;我们将为您介绍创建一个网络爬虫的过程&#xff0c;这个爬虫不仅可以获取和保存…

vivado 启动实施运行

启动实施运行 您可以启动活动的实现运行&#xff0c;也可以选择同时启动多个运行。 启动单个实施运行 执行以下任意操作以在“设计运行”窗口中启动活动的实现运行。启动单个实现运行将为实现启动一个单独的过程。 提示&#xff1a;在“设计运行”窗口中选择一个运行&#…

智慧公厕的特点和特色

智慧公厕是指利用信息化、数字化、智慧化技术&#xff0c;对公共厕所的使用、运营、管理、养护等全方位业务流程进行智能化改造的创新型厕所。这些智慧公厕不仅提供了便捷的厕所服务&#xff0c;还能提升城市形象&#xff0c;为智慧环卫等管理平台提供基础数据信息。本文以智慧…