1782 特殊的运算
Description
最近,xenocide看起了《Structure and Interpretation of Computer Programs》, 简称SICP。在本书的第一章中,介绍了S-Expression。
S-Expression由运算符、操作数、括号组成。
1、 运算符后可跟若干个操作数; 2、 括号决定运算优先级; 3、 运算符都在括号的第一个位置 4、 操作数之间都由至少一个空格隔开。 合法的运算符包括+, -, , /,他们的含义如下: 1) (+ x1 x2 x3 … xN) : 求x1到xN的和 2) (- x1) : 求x1的相反数. (- x1 x2 x3 … xN) : 求x1 – x2 – x3 … - xN 3) ( x1 x2 x3 … xN) : x1到xN的乘积 4) (/ x1 x2) : x1与x2的商,即 x1 / x2 除了标准的运算符之外,为了完成更为强大的功能,引入特殊运算子let (let ((x 1) (y 4)) (+ x y)) 即在let的作用范围内,x代表1而y代表4, 他的值为其作用范围内的最后一个表达式的运算结果.同时我们定义: let运算无法嵌套, 并只能出现在最外层,而且他的每个符号都为小写英文字母.(即最多有26个符号变量) 这意味着如下表达式是不合法的: (+ 5 (let (x 1) x))
以下为一些合法的S-Expression。 (+ 1 2) (+ 5 6 7) (* 5 6 7) (/ (+ 5 5) (- 4 2)) (let ((x 1) (y 2) (z 3)) (- x y z) (+ x y z)) (let ((x 100) (y 200) (z 300)) (+ x y z) (/ y z)) (let () 100)
简单的S-Expression,xenocide可以在1秒钟内准确无误的算出答案。可是,对于某些复杂的S-Epression,他却无法快速的计算出答案。 于是,他拿出了他的电脑开始写程序。正当他在快速的coding时,他接到一个来自“文艺女”同学电话,所以他不得不停止了这项工作。现在,他想请你帮忙来完成这个程序。
Input
输入包含一个正整数T,表示有T组测试数据。 每组测试数据包含一个长度不超过1000的字符串,表示待计算的S-Expression。 S-Expression中可能包含换行符。S-Expression中的数字都为整数 保证每组数据合法,并且答案在double可表示范围内。
Output
对于每组测试数据,给出每个S-Expression的结果,保留3位小数点。
Sample
Input
7
(+ 1 2)
(+ 5 6 7)
(* 5 6 7)
(/ (+ 5 5) (- 4 2))
(let ((x 1) (y 2) (z 3)) (- x y z) (+ x y z))
(let ((x 100) (y 200) (z 300)) (+ x y z) (/ y z))
(let () 100)
Output
3.000
18.000
210.000
5.000
6.000
0.667
100.000
Comments