题目描述
先说明一下什么是中缀式:
如2+(3+4)*5这种我们最常见的式子就是中缀式。
而把中缀式按运算顺序加上括号就是:(2+((3+4)*5))
然后把运算符写到括号前面就是+(2 *( +(3 4) 5) )
把括号去掉就是:+ 2 * + 3 4 5
最后这个式子就是该表达式的前缀表示。
给你一个前缀表达式,请你计算出该前缀式的值。
比如:
+ 2 * + 3 4 5的值就是 37
输入
以EOF为输入结束的标志。
输出
样例输入
+ 2 * + 3 4 5 + 5.1 / 3 7
样例输出
37.00 5.53
将中缀表达式转换为前缀表达式
转换步骤如下:
- 初始化两个栈:运算符栈s1,储存中间结果的栈s2
- 从右至左扫描中缀表达式
- 遇到操作数时,将其压入s2
- 遇到运算符时,比较其与s1栈顶运算符的优先级
- 如果s1为空,或栈顶运算符为右括号“)”,则直接将此运算符入栈
- 否则,若优先级比栈顶运算符的较高或相等,也将运算符压入s1
- 否则,将s1栈顶的运算符弹出并压入到s2中,再次转到(4-1)与s1中新的栈顶运算符相比较
- 遇到括号时
- 如果是右括号“)”,则直接压入s1
- 如果是左括号“(”,则依次弹出S1栈顶的运算符,并压入S2,直到遇到右括号为止,此时将这一对括号丢弃
- 重复步骤2至5,直到表达式的最左边
- 将s1中剩余的运算符依次弹出并压入s2
- 依次弹出s2中的元素并输出,结果即为中缀表达式对应的前缀表达式
计算方法:
将得到的字符串处理为只含有数字和运算符
将处理后的字符串从前到后压如栈S1中
将栈S1中的元素逐个弹出
若弹出元素判断为数字 压入栈S2中
若弹出元素判断为运算符 从栈S2中弹出两个元素 与该运算符进行运算 将运算结果重新压入栈S2中
处理完S1中所有元素后 S2栈顶元素即为计算结果
#include <iostream>
#include <stack>
#include <cstdlib>
#include <iomanip>
using namespace std;
double calculate(char c,double l,double r)
{
switch(c)
{
case '+':
return l+r;
case '-':
return l-r;
case '*':
return l*r;
case '/':
return l/r;
}
return 0;
}
int main()
{
string s;
stack<double> num;
while(getline(cin,s))
{
for(int i=s.length()-1;i>=0;--i)
{
if(s[i]==' ')//因为输入的每个字符有空格隔开,所以要忽略空格
continue;
else if(isdigit(s[i]))//如果是数字
{
while(isdigit(s[i])||s[i]=='.')//这个数字可能是小数或者数字不止一位
--i; //要找到这个数第一个数字的位置
i++; //前面返回的是第一个数的前一个位置
double t_num=atof(&s[i]); //那这个数转成数字压栈
num.push(t_num);
}
else//如果是操作符,就把栈里面靠近栈定的两位元素取出来
{//做运算,然后再把结果压栈
double l=num.top();
num.pop();
double r=num.top();
num.pop();
num.push(calculate(s[i],l,r));
}
}//for
cout<<setiosflags(ios::fixed)<<setprecision(2)<<num.top()<<endl;
num.pop();
}//while
return 0;
}
前缀式计算 nyoj的更多相关文章
-
NYOJ 128 前缀式计算
前缀式计算 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 先说明一下什么是中缀式: 如2+(3+4)*5这种我们最常见的式子就是中缀式. 而把中缀式按运算顺序加上括 ...
-
NYOJ128前缀式计算
前缀式计算 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 先说明一下什么是中缀式: 如2+(3+4)*5这种我们最常见的式子就是中缀式. 而把中缀式按运算顺序加上括 ...
-
NYOJ128 前缀式计算 【栈】
前缀式计算 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描写叙述 先说明一下什么是中缀式: 如2+(3+4)*5这样的我们最常见的式子就是中缀式. 而把中缀式按运算顺序加上 ...
-
NYOJ128 前缀式计算(栈的运用)
题目信息: http://acm.nyist.net/JudgeOnline/problem.php? pid=128 + 2 * + 3 4 5的值就是 37,详见输入输出. 输入 有多组測试数据, ...
-
NYOJ--128--前缀式计算(表达式求值)
前缀式计算 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 先说明一下什么是中缀式: 如2+(3+4)*5这种我们最常见的式子就是中缀式. 而把中缀式按运算顺序加上括 ...
-
nyoj-----前缀式计算
前缀式计算 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 先说明一下什么是中缀式: 如2+(3+4)*5这种我们最常见的式子就是中缀式. 而把中缀 ...
-
搜索广告与广告网络Demand技术-流式计算平台
流式计算平台-Storm 我们以Storm为例来看流式计算的功能是什么. 下面内容引用自大圆的博客.在Storm中,一个实时应用的计算任务被打包作为Topology发布,这同Hadoop的MapRed ...
-
流式计算与计算抽象化------《Designing Data-Intensive Applications》读书笔记15
上篇的内容,我们探讨了分布式计算中的MapReduce与批处理.所以本篇我们将继续探索分布式计算优化的相关细节,并且分析MapReduce与批处理的局限性,看看流式计算是否能给我们在分布式计算层面提供 ...
-
Apache Beam—透视Google统一流式计算的野心
Google是最早实践大数据的公司,目前大数据繁荣的生态很大一部分都要归功于Google最早的几篇论文,这几篇论文早就了以Hadoop为开端的整个开源大数据生态,但是很可惜的是Google内部的这些系 ...
随机推荐
- 6/20 sprint3 看板和燃尽图的更新
-
java10-2 toString()方法
public String toString():返回该对象的字符串表示. Integer类下的一个静态方法: public static String toHexString(int i):把一个整 ...
-
Hibernate,JPA注解@OneToMany_Set
用例代码如下: 数据库DDL语句 1,CAT表 create table CAT ( id CHAR) not null, create_time ), update_time ), cat_name ...
-
Tuning 简介
典型的不好的设计: 破坏了系统的可扩展性(韧性) Applications requiring significant concurrency management as user populatio ...
-
encodeURIComponent编码后java后台的解码 (AJAX中文解决方案)
encodeURIComponent编码后java后台的解码 (AJAX中文解决方案) 同学的毕业设计出现JavaScript用encodeURIComponentt编码后无法再后台解码的问题. 原来 ...
-
Table of Contents - CXF
Getting Started A simple JAX-WS service Writing a service with Spring Tools WSDL to Java RESTful Ser ...
-
如何使用Flexbox和CSS Grid,实现高效布局
CSS 浮动属性一直是网站上排列元素的主要方法之一,但是当实现复杂布局时,这种方法不总是那么理想.幸运的是,在现代网页设计时代,使用 Flexbox 和 CSS Grid 来对齐元素,变得相对容易起来 ...
-
Android查缺补漏(线程篇)-- IntentService的源码浅析
本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8975114.html 在Android中有两个比较容易弄混的概念,Servic ...
-
第50章 设备授权端点(Device Authorization Endpoint) - Identity Server 4 中文文档(v1.0.0)
设备授权端点可用于请求设备和用户代码.此端点用于启动设备流授权过程. 注意 终端会话端点的URL可通过发现端点获得. client_id 客户标识符(必填) client_secret 客户端密钥可以 ...
-
【deep learning学习笔记】注释yusugomori的DA代码 --- dA.cpp --模型准备
辅助函数和构造函数. #include <iostream> #include <math.h> #include "dA.h" using namespa ...