2682: 区间运算
题目描述
区间运算是数学的一个领域。在区间运算中,常量和变量并不表示为一个单独、精确的值,而是表示为一个有着上界和下界的区间或范围。在普通的运算中,一个数量可以表示为数轴上的一个点;而在区间运算中,一个数量表示数轴上的一段,例如[3,5]表示数轴上从 3到 5 的一段。当精确的数值表示为区间时,上界与下界是相同的,如 5 表示为区间即[5,5]。
两个区间的运算,是指一个区间中的每个点与另一个区间中的每个点所做的运算,通过运算所得的所有点的集合即为运算的结果。例如,[3,5]+[-10,1]=[-7,6]。你的任务是写一个可以根据单行表达式进行取反数、加、减、乘、除等基本的区间运算的程序。下面是一些运算的例子:
取相反数 -[-3,5]=[-5,3]
加法 [3,5]+[-10,1]=[-7,6]
减法 [3,5]-[-10,1]=[2,15]
乘法 [3,5]*[-10,1]=[-50,5]
除法 [3,5]/[-10,-0.1]=[-50,-0.3]
输入
包含一行或多行区间运算的中缀表达式,每个区间都表示为 [min,max],表达式中包括括号、负号(-)、加号(+)、减号(-)、乘号(*)和除号(/),括号可能是嵌套的。每一行中都有可能有空格,但空格不会在表示区间的括号 “[min,max]”中间或负号后出现。程序不需要处理科学记数法(如 2E6=2000000)。每一行均不超过 80 个字符。运算采用标准的优先级规则。下面按优先级递减的顺序给出各个运算符:
() 括号
- 取相反数
* / 乘法和除法,同级运算按从左往右的顺序
+ - 加法和减法,同级运算按从左往右的顺序
输出
对于输入的每一行,都相应地输出一行,输出的内容就是区间运算的最后结果,用[min,max]的形式表示,其中 min 不能大于 max,输出结果都精确到小数点后第三位,区间
形式中间不能有空格。但如果表达式里面有除法,而且作为除数的区间包含 0,则输出“Division by zero”即可。
样例输入 复制
-[-3,5]
[3,5]+[-10,1]
[3,5]-[-10,1]
[3,5]*[-10,1]
(([3,5]/[-10,-0.1])/-[2,2])
样例输出 复制
[-5.000,3.000]
[-7.000,6.000]
[2.000,15.000]
[-50.000,5.000]
[0.150,25.000]