首页 > 其他分享 >用栈来处理算式

用栈来处理算式

时间:2024-07-01 20:59:38浏览次数:21  
标签:int 算式 top pop st 处理 用栈 eval op

3302. 表达式求值 - AcWing题库

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n' 
const int N=5e5+10;
stack<int>st;//存数字 
stack<char>op;//存操作符

void eval()
{
   int a=st.top();//第二个数 
   st.pop();
   int b=st.top();//第一个数 
   st.pop();
   char c=op.top();//运算符 
   op.pop();
   
   int x;
   if(c=='+' )x=b+a;
   if(c=='-' )x=b-a;
   if(c=='*') x=b*a;
   if(c=='/') x=b/a;
   
   st.push(x);	//入栈 


}







signed main()
{   
  ios::sync_with_stdio(0);
  cin.tie(0);cout.tie(0); 
  //优先级表 
  unordered_map<char,int>mp{ {'+',1},{'-',1},{'*',2},{'/',2} };
  string s;
  cin>>s;
  for(int i=0;i<s.size();i++)
  {
  	  auto c=s[i];
  	  if(isdigit(c))//是数字 
  	  {
  	      int x=0,j=i;
		  while(j<s.size() && isdigit(s[j]))//找到非数字为止 
		   x=x*10+ s[j++]-'0';
		  i=j-1;//更新i 
		  st.push(x);
		  
		  	
			
	   }
	   
	   else if(c=='(') op.push(c);//(入栈 
	   else if(c==')') 
	   {
	   	   while(op.top()!='(') eval();//找到(为止 先进行运算括号内的值因为优先级最大 
	   	   op.pop();//(出栈 
	   }
	   else 
	      {
	   	       while(op.size() &&op.top() != '('&& mp[op.top()]>=mp[c]) eval();//如果栈顶运算符更大就进行运算 
	   	       op.push(c);//入栈 
	      }
  }
  while(op.size()) eval();//对剩余数运算 
   cout<< st.top()<<endl;
	
  
   
      
   
  
    
  
  
  
  
  
}

标签:int,算式,top,pop,st,处理,用栈,eval,op
From: https://blog.csdn.net/hui_le4/article/details/140109851

相关文章

  • 选择合适的 Fluent 前处理工具
    随着商业软件的不断发展,Fluent 仿真的前处理工具也越来越多。同时,大多数软件都在不断的更新功能,使我们的工作越来越方便、快捷、精准。当然,面对着种类繁多的前处理工具,如何选择适合自己、适合仿真的软件,反而成为了一件“幸福的烦心事”。本文就尝试从一个最为普适 Fluent 仿......
  • alert 窗口的处理
    alert窗口的类型:警告框、确认框、对话框 操作alert窗口:切换至alert窗口:driver.switch_to.alert获取alert窗口的值:alert.text确定:alert.accept()取消:alert.dismiss()输入值:alert.send_keys("内容") fromseleniumimportwebdriverimportti......
  • 【AI绘画SD】ComfyUI-神级插件-一键高清放大,不改变原图,只做高清处理!
    哈喽大家好,我是设计师阿威以前介绍的一些AI绘画放大插件都是相当于等比例重绘,这就导致了有些细节部分可能会改变,今天给大家分享一个ComfyUI的插件—ComfyUI-SUPIR,可以不改变原图,只做高清处理。下图是作者的案例效果1、下载插件在Github下载插件:https://github.com/kijai......
  • 可计算离散整体几何结构的 MeshDGP使用——基于C#的geometry processing framework几
    目录引出MeshDGP项目下载和打开遇到的报错解决如何运行使用打开使用函数工具菜单等总结其他CAD/CAE/CAM几何引擎-软件概述郝建兵CAD/CAE/CAMCADCAECAM几何模型内核ACIS两个老大之一OpenCascadeParasolid两个老大之一Autodesk的内核各种CAD自定义信号和槽1.自定......
  • 探索开源世界:常用的条形码图像处理库及其应用
                    在数字时代,条形码作为信息传输的重要媒介,其识别与处理技术显得尤为重要。无论是物流管理、库存控制,还是产品追溯,条形码的准确读取都是实现高效运营的关键。本文将带领大家走进开源软件的世界,探索那些优秀的条形码图像处理库,了解它们的特点、......
  • 数据预处理与特征工程原理与代码实战案例讲解
    数据预处理与特征工程原理与代码实战案例讲解1.背景介绍1.1问题的由来在数据科学和机器学习领域,数据是基础,而有效的数据预处理与特征工程则是提升模型性能的关键。数据通常来源于多种渠道,包括传感器、社交媒体、在线平台等,这些数据可能包含噪声、缺失值、异常值以及不......
  • 微服务服务添加数据源、认证授权、日志记录,安全处理
    为了增强SpringBoot后端服务的功能,我们可以添加数据库支持、认证授权、日志记录和安全处理。以下是如何集成这些功能的基本步骤。数据库集成添加依赖:在pom.xml或build.gradle中添加数据库驱动和SpringDataJPA的依赖。配置数据库:在src/main/resources/applicat......
  • CentOS 7报错Erro:NetworkManager is not running怎么处理?
    CentOS7系统报错Error:NetworkManagerisnotrunning,意思是NetworkManager未在运行,NetworkManager是Linux系统上管理网络设置的守护进程,负责自动处理和配置网络连接,未运行可能会导致网络连接问题。遇到报错Error:NetworkManagerisnotrunning我们该如何处理呢?今天飞飞和你分......
  • CF631D Messenger (kmp + 字符串处理)
    CF631DMessengerkmp+字符串处理思路简单,写起来细节比较多首先要合并同类项,然后再考虑什么时候\(s=t\)。如果合并后\(t\)有一种或两种字符,那么都可以直接做;大于两种,我们发现匹配的条件为:中间部分完全相同,首尾字符相同并且\(s\)首尾字符的数量要大于\(t\)。中间部分完......
  • 代码随想录算法训练营第十天|232.用栈实现队列、225.用队列实现栈、20.有效的括号、 1
    今天学习了栈与队列这两个数据结构,栈是一个先进后出的结构,在C++中用stack进行表示,有push、pop、top、empty这些属性;队列是一个先进后出的结构,有push、pop、front、back。empty这些属性。在底层实现上,他们都是用deque双向队列进行实现的。232.用栈实现队列题目链接:232.用栈......