【XJOI】题解 表达式求值-逆波兰算法+字符串处理

题目链接

 

数学表达式求值:输入由数字、‘+’,‘—’,‘*’,‘/’,乘方’^’,小括号组成的字符串,输出运算结果;

 

输入格式:

一个数学表达式

 

输出格式:

运算结果,保留三位小数

 

样例输入:

样例输入一:
3*(5+3^2*(3-4)+6/2)+2.5
样例输入二:
2^0.5

 

样例输出:

样例输出一:
-0.500
样例输出二:
1.414

 

数据范围:

不会出现形如2^3^4的数据
运算的中间值不会很大
长度小于等于100

 

时间限制:

1s

 

空间限制:

64M

 

------------------------------------------------------------------------题解分割线----------------------------------------------------------------------------------

乍一看,这是一道很简单的模拟题,但当开始编码处理时就会发现,这是一道非常考验人细节处理(恶心人)的好题(毒瘤题)

那么这道题怎么做呢,初始的表达式用计算机来处理求值很显然是很困难的

那有什么好办法呢? 当然有啦,用逆波兰算法来求出表达式的后缀表达式,就可以有顺序的处理数值啦

先介绍一下逆波兰算法:(摘自网友博客)

 

逆波兰算法介绍

假定给定一个只 包含 加、减、乘、除,和括号的算术表达式,你怎么编写程序计算出其结果。

问题是:在表达式中,括号,以及括号的多层嵌套 的使用,运算符的优先级不同等因素,使得一个算术表达式在计算时,运算顺序往往因表达式的内容而定,不具规律性。 这样很难编写出统一的

评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值