表达式的计算
时间:2019-08-17
本文章向大家介绍表达式的计算,主要包括表达式的计算使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
引用某本蓝书
解决这道题,首先其实就是两步,1.把中缀转后缀 2.把后缀计算并输出
1. 中缀表达式转后缀表达式
建立一个栈来存储运算符
- 左括号:进栈
- 数字:输出
- 右括号:取栈顶直到左括号,把左括号出栈
- 运算符:保证优先级的前提下,插入到合适的地方
2.计算后缀表达式
建立一个栈存数
- 遇到数:进栈
- 遇到运算符:取栈顶两个数进行计算
大概就是这样了,代码如下:
#include<bits/stdc++.h> using namespace std; inline int bj(char op){//^ > */ > +- > ( if(op=='(')return 0; if(op=='+'||op=='-')return 1; if(op=='*'||op=='/')return 2; if(op=='^')return 3; return -1; 防止特殊情况 } inline int calc(char op,int a,int b){//运算 switch(op){//注意先后顺序 case '+':return a+b; case '-':return a-b; case '*':return a*b; case '/':return a/b; case '^':return pow(a,b); } } string st1; inline string change(string s){//转成后缀表达式 int top=0; string res="";//string会更方便 for(int i=0;i<s.size();i++){ if(isdigit(s[i])) res+=s[i]; else if(s[i]=='(')st1[++top]=s[i];//左括号 else if(s[i]==')'){//右括号 while(top>0&&st1[top]!='(') res+=st1[top--]; top--; } else { while(top>0&&bj(st1[top])>=bj(s[i])) res+=st1[top--]; st1[++top]=s[i]; } } while(top)res+=st1[top--]; return res; } int st[105],top; inline void get_ans(string s){ for(int i=0;i<s.size();i++) cout<<s[i]<<" "; cout<<endl; for(int i=0;i<s.size();i++){ if(isdigit(s[i])) st[++top]=s[i]-'0'; else{ int a=st[top--],b=st[top--]; st[++top]=calc(s[i],b,a); for(int j=1;j<=top;j++)//先输出处理过的 printf("%d ",st[j]); for(int j=i+1;j<s.size();j++)//输出未处理的 printf("%c ",s[j]); puts(""); } } } int main(){ string s; cin>>s; s=change(s); get_ans(s); return 0; }
原文地址:https://www.cnblogs.com/coder-cjh/p/11370347.html
- eclipse中关联文件设置方法
- Kubernetes服务网格(第8部分):Linkerd作为入口控制器
- 使用RestSharp 库消费Restful Service
- Python-面向对像及其他
- 基于MongoDB GridFS的图片存储
- css3 过渡和2d变换——回顾
- Microsoft 防跨站点脚本库AntiXSS Library v4.2.1
- Compilify——让你在浏览器中编译.NET代码
- Python进阶-面向对象
- WCF RESTful服务的Google Protocol Buffers超媒体类型
- 使用CoreOs,Docker和Nirmata部署微服务类型的应用
- .NET 4 上的REST 框架
- 结合游戏开发与人工智能研究,游戏大厂 Ubisoft 成立AI研发部门
- Quartz.NET的管理工具
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 京东技术主导:全新架构的分布式事务Hmily 2.1.1发布
- iOS音视频接入-TRTC接入前期key、秘钥等准备
- 你一定不知道的 Linux 使用技巧
- 当 Python 爬虫搭配起 Bilibili 唧唧,奇怪的生产力出现了
- 一个简单的小技巧,监控网页所有动态标签创建的调用处
- SAP Spartacus storefrontapp index.html的design time和runtime
- OS开发爱好者福利来了:树莓派上编译C语言,顺便掌握一波硬件知识
- 一个简单易用的图标字体库和CSS框架fontawesome
- OLAP 数据平台 Druid 第一步,编写 Spec 配置
- 搭建 Kubernetes 集群 Dashboard 2.0+ 可视化插件
- Kubernetes 集群基本概念
- 未能幸免!安全容器也存在逃逸风险
- vue中v-for图片src路径错误
- 读书笔记 dotnet 什么时候进行垃圾回收
- Windows系统下ROS1或ROS2获取RTSP视频等功能包