1. 原题:https://logn.me/problem/1009

2. 思路:

题意:给出中缀表达式,计算结果。
思路:
栈的应用,有点麻烦。
只有转换为后缀表达式,才好计算。
转换过程大概是:
中缀中的运算数直接存入post里,
运算符要和oper的栈顶比较优先级,
大的话,压入oper
小的话,弹出,并计算,再把结果存入post里,
循环处理,即可。
已AC.

3. 源码:

#include<iostream>
#include<string>
#include<stack>
#include<vector>
using namespace std;int isp[128] = { 0 }; //**存储栈中运算符的优先级
int icp[128] = { 0 }; //**存储栈外运算符的优先级
string ss; //**读入的字符串
stack<int> oper; //**操作符栈
vector<double> post;//存储后缀表达式void ino2post(); //中缀转后缀,并计算int main()
{//freopen("in.txt", "r", stdin);cin >> ss;isp['('] = icp[')'] = 1;isp[')'] = icp['('] = 6;isp['+'] = isp['-'] = 3;icp['+'] = icp['-'] = 2;isp['/'] = isp['*'] = 5;icp['/'] = icp['*'] = 4;oper.push('#'); //表示结束ss.push_back('#');//表示结束ino2post();    return 0;
}void ino2post()
{int pos = 0;while (pos < ss.size()){int num = 0;int firstpos = pos;if (isdigit(ss[pos])) //运算数,存入post{while (isdigit(ss[pos]))//**判断是数字{pos++;}double x = stod(ss.substr(firstpos, pos));post.push_back(x);}else{while (icp[ss[pos]] < isp[oper.top()])//出栈并计算{double a, b;b = post.back(); //a, b不要搞反了post.pop_back();a = post.back();post.pop_back();switch (oper.top()){case '+':post.push_back(a + b);break;case '-':post.push_back(a - b);break;case '*':post.push_back(a * b);break;case '/':post.push_back(a / b);break;}oper.pop();}if (icp[ss[pos]] == isp[oper.top()]){if (ss[pos] == ')'){oper.pop();pos++;}else //**‘#’号,可以结束了break;}else{ //**运算符优先级大, 入栈oper.push(ss[pos]);pos++;}}}printf("%.2f\n", post[0]);
}

[ANOJ]1009某计算器的超电磁炮[栈的应用]相关推荐

  1. 炮姐ed计算机谱子,炮姐来了!《科学超电磁炮T》正式PV公开 1月开播_游侠网 Ali213.net...

    <科学超电磁炮(某科学的超电磁炮)>第三季<科学超电磁炮T>官方公开了正式版PV,全新TV版动画将于2020年1月10日正式开播,预定半年番 PV中展示了学园都市每年的大型体育 ...

  2. c语言计算器程序代码 链栈,【C语言】简易科学计算器源代码(链栈应用)(原创).doc...

    [C语言]简易科学计算器源代码(链栈应用)(原创) 用到的是算符优先法的思想,现摘自严蔚敏的数据结构(C语言版)的3.2.5章来详细说明算符优先法的思想: (摘抄结束) 我给出的计算器功能有:支持欧拉 ...

  3. C++做四则运算的MFC计算器(二)栈转换和计算后缀表达式

    上篇写了MFC界面搭建,这篇就写实现计算.涉及到数据结构,对新手很不友好. 虽然是MFC程序,但是能灵活地分离后台代码,自行构建控制台程序. 上一篇文章链接:C++做四则运算的MFC计算器(一)MFC ...

  4. PHP高级计算器的过程,PHP使用栈完成高级计算器-接上文模拟栈

    距离上一篇文章PHP模拟栈,小梦就答应了小伙伴们要使用栈来完成一个实战的例子,今天就给大家带来了这个例子,让大家更加深入理解它的使用场景! 当出现'3+4*3-2'这个字符串的时候,我们头脑中会有很多 ...

  5. 数据结构与算法(3-1)栈(顺序栈、两栈共享空间、链栈、栈的计算器)

    目录 一.顺序栈 存储结构 总代码 二.两栈共享空间 存储结构: 总代码: 三.链栈 存储结构: 总代码: 一.顺序栈 存储结构: 栈特点:先进后出,后进先出.(特殊的线性表) 入栈时在栈顶添加元素, ...

  6. 七、使用栈实现综合计算器(中缀表达式)

    使用栈实现综合计算器(中缀表达式) 1.栈的实际需求 请输入一个表达式,计算式:[722-5+1-5+3-3] ,计算出结果 计算机底层是如何运算得到结果的? 注意不是简单的把算式列出运算,因为我们看 ...

  7. Leetcode224 基本加减计算器-双栈和状态转换

    题目 实现一个基本的计算器来计算一个简单的字符串表达式的值. 字符串表达式可以包含左括号 ( ,右括号 ),加号 + ,减号 -,非负整数和空格 . 示例 1: 输入: "1 + 1&quo ...

  8. 数据结构:栈实现简易计算器

    文章目录 栈实现简易计算器 思路 代码实现 栈结构 运算方法 测试 栈实现简易计算器 之前的博客已经介绍了栈数据结构,栈有着数据先进后出的特点,因此用于实现简易计算器时相当方便.本博文中将介绍如何用栈 ...

  9. 八、【栈和队列】栈的应用

    栈的应用 栈具有先进后出的特点,这个特点在解决某些问题时是很有效的.本节我们来看几个栈的常见应用以及栈结构适合解决的问题类型. 1 数制转换 我们日常生活中用的是十进制,而计算机中绝大多数时候是二进制 ...

最新文章

  1. Database design best practice(1):关于primary key及其它
  2. c# 非阻塞算法_c#创建非阻塞tcp通信
  3. 教你网站怎么添加返回顶部代码?
  4. Mysql 分区介绍(二) —— RANGE分区
  5. 48. C# -- 事件
  6. 计算机要学打字吗,有了电脑打字,还需要练字吗?
  7. ABP Framework 研习社经验总结(6.28-7.2)
  8. 基于openfire源码开发插件
  9. tomcat内存溢出
  10. Python面向对象基础一
  11. ICCV 2019 | 旷视研究院提出VANet:具备视角感知力的车辆重识别网络
  12. httpclient在获取response的entity时报异常
  13. 用Python生成测试数据
  14. 2015最新Android学习线路图
  15. Delphi中对Jpeg格式文件的处理
  16. 测试过程中印象最深刻的bug?| 万能回答必杀技
  17. Python数据分析!NBA的球星们喜欢在哪个位置出手!
  18. 计算思维是运用计算机科学的什么进行,什么是计算思维?
  19. 小学四年级计算机制作月历教案,冀教版信息技术四上第1课《制作月历》教案1.doc...
  20. ffmpeg 视频裁剪格式问题

热门文章

  1. 快毕业了,老师说用Python做个学生管理系统打包成exe文件发给她,就不追究我旷课的事情了,这不简简单单?
  2. 计算机专业用集显电脑够用吗,买电脑该选择独立显卡还是集成显卡好呢?
  3. 李嘉诚十四句成功经典
  4. html转换为pdf的笔顺,拼音笔顺的正确写法(精美图文排版)图[整理].pdf
  5. 2018/7/9开始写作吧
  6. 如何DIY一台墨水屏笔记本电脑?
  7. 用计算机画画教学设计,《认识画图软件》教学设计
  8. html中颜色的三种不同表示方法,表示颜色的有三种方式
  9. python光速入门笔记
  10. 加密软甲安装中间遇到问题【EZSocket】卸载后未重启电脑,再安装后加密解密都不生效,看不到加密文件时候