特殊的运算
#描述#
<pre>
最近,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, 他的值为其作用范围内的最后一个表达式的运算结果.同时我们定义:<BR>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,他却无法快速的计算出答案。<BR>于是,他拿出了他的电脑开始写程序。正当他在快速的coding时,他接到一个来自“文艺女”同学电话,所以他不得不停止了这项工作。现在,他想请你帮忙来完成这个程序。
</pre>
#格式#
##输入格式##
输入包含一个正整数T,表示有T组测试数据。
每组测试数据包含一个长度不超过1000的字符串,表示待计算的S-Expression。
S-Expression中可能包含换行符。S-Expression中的数字都为整数
保证每组数据合法,并且答案在double可表示范围内。
##输出格式##
对于每组测试数据,给出每个S-Expression的结果,保留3位小数点。
#样例1#
##样例输入1##
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)
##样例输出1##
3.000
18.000
210.000
5.000
6.000
0.667
100.000
#限制#
1000ms
32768KB
#提示#
#来源#