表达式求值2

表达式求值2

测试数据来自 system/2019

描述

计算给定表达式的值。

合法的表达式中可能出现的字符有且只有:+-*/.()以及0-9

操作符

(双目的)+-优先级相同,且为左结合。

*/优先级相同,且为左结合。

*/的优先级高于(双目的)+-

+-可能是单目运算符,这种情况下他们优先级高于*/,并且右结合。

以括号(())包围的子表达式优先级最高。括号支持嵌套。

+-*/分别为加法、减法、乘法、除法。

数字

需要是合法的数字。

前导0最多一个。

小数点.最多一个。

如果有小数点.,左右都要有数字。

格式

输入格式

一行表达式(字符串),长度小于1000,不会出现空格等空白字符即使表达式非法。

所有出现的数字,计算中间结果,以及最终结果,可用双精度浮点数存储。

输出格式

  • 如果表达式非法,输出FormulaException
  • 如果表达式合法但出现除法时除数为零(==0.0),输出ZeroException
  • 如果表达式合法且计算正常,输出表达式的计算结果,结果四舍五入到小数点后第二位。

样例1

样例输入1

1+1

样例输出1

2.00

样例2

样例输入2

0123

样例输出2

FormulaException

样例3

样例输入3

2/(0.2-0.1-0.05-0.05)

样例输出3

ZeroException

样例4

样例输入4

((1+2)*3+4)*5

样例输出4

65.00

样例5

样例输入5

-(1)

样例输出5

-1.00

样例6

样例输入6

1-(-(-1))

样例输出6

0.00

样例7

样例输入7

2*-3

样例输出7

FormulaException

样例8

样例输入8

2--3

样例输出8

FormulaException

样例9

样例输入9

(2/(0.2-0.1-0.05-0.05)

样例输出9

FormulaException

限制

各个测试点1s,256MiB内存空间。

信息

ID
1063
难度
(无)
分类
数据结构 | 字符串 | 表达式处理其他 | 数学 点击显示
标签
(无)
递交数
0
已通过
0
通过率
?
上传者