luogu#P1812. 区间运算

区间运算

题目描述

区间运算是数学的一个领域。在区间运算中,常量和变量并不表示为一个单独、精确的值,而是表示为一个有着上界和下界的区间或范围。在普通的运算中,一个数量可以表示为数轴上的一个点;而在区间运算中,一个数量表示数轴上的一段,例如 [3,5][3,5] 表示数轴上从 3355 的一段。当精确的数值表示为区间时,上界与下界是相同的,如 55 表示为区间即为 [5,5][5,5]

两个区间的运算,是指一个区间中的每个点与另一个区间中的每个点所做的运算,通过运算所得的所有点的集合即为运算的结果。例如,[3,5]+[10,1]=[7,6][3,5]+[-10,1]=[-7,6]。你的任务是写一个可以根据单行表达式进行取相反数、加、减、乘、除等基本的区间运算的程序。下面是一些运算的例子:

  • 取相反数:[3,5]=[5,3]-[-3,5]=[-5,3]
  • 加法:[3,5]+[10,1]=[7,6][3,5]+[-10,1]=[-7,6]
  • 减法:[3,5][10,1]=[2,15][3,5]-[-10,1]=[2,15]
  • 乘法:[3,5]×[10,1]=[50,5][3,5]\times [-10,1]=[-50,5]
  • 除法:[3,5]÷[10,0.1]=[50,0.3][3,5]\div [-10,-0.1]=[-50,-0.3]

输入格式

程序的输入包含一行或多行区间运算的中缀表达式,每个区间都表示为 [min,max][\min,\max],表达式中包括括号、负号(-\verb!-!)、加号(+\verb!+!)、减号(-\verb!-!)、乘号(*\verb!*!)和除号(/\verb!/!),括号可能是嵌套的。每一行中都有可能有空格,但空格不会在表示区间的括号 [min,max][\min,\max] 中间或负号后出现。程序不需要处理科学记数法,如 2E6=2×106\verb!2E6!=2\times 10^6。每一行都不超过 8080 个字符。运算采用标准的优先级规则。下面按优先级递减的顺序给出各个算符:

  • (,)\verb!(!,\verb!)! 括号;
  • -\verb!-! 取相反数;
  • *,/\verb!*!,\verb!/!,乘法和除法,同级运算按从左到右的顺序;
  • +,-\verb!+!,\verb!-!,加法和减法,同级运算按从左到右的顺序。

输出格式

对于输入文件中每一行的表达式,以 [min,max][\min,\max](均保留 33 位小数)的形式输出运算结果。每个结果占一行。结果中不应有空格。在运算中,如果将一个包含 00 的区间用作除数,则输出 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]