数学表达式求值:输入由数字、‘+’,‘—’,‘*’,‘/’,乘方’^’,小括号组成的字符串,输出运算结果;
输入格式:
一个数学表达式
输出格式:
运算结果,保留三位小数
样例输入:
样例输入一:
3*(5+3^2*(3-4)+6/2)+2.5
样例输入二:
2^0.5
样例输出:
样例输出一:
-0.500
样例输出二:
1.414
数据范围:
不会出现形如2^3^4的数据
运算的中间值不会很大
长度小于等于100
时间限制:
1s
空间限制:
64M
------------------------------------------------------------------------题解分割线----------------------------------------------------------------------------------
乍一看,这是一道很简单的模拟题,但当开始编码处理时就会发现,这是一道非常考验人细节处理(恶心人)的好题(毒瘤题)
那么这道题怎么做呢,初始的表达式用计算机来处理求值很显然是很困难的
那有什么好办法呢? 当然有啦,用逆波兰算法来求出表达式的后缀表达式,就可以有顺序的处理数值啦
先介绍一下逆波兰算法:(摘自网友博客)
逆波兰算法介绍
假定给定一个只 包含 加、减、乘、除,和括号的算术表达式,你怎么编写程序计算出其结果。
问题是:在表达式中,括号,以及括号的多层嵌套 的使用,运算符的优先级不同等因素,使得一个算术表达式在计算时,运算顺序往往因表达式的内容而定,不具规律性。 这样很难编写出统一的

最低0.47元/天 解锁文章





