fzu 2036 Log Calculator(数学+Java大数)

Description

Input

The first line of the input contains an integer T(T≤100), indicating the number of test cases. Each test case contains two float numbers: a, b(-10^10000≤a,b≤10^10000), indicating and respectively.

Output

For each test case, print a line containing the test case number (beginning with 1) and the required result. Because of the result may be an irrational number, so you just need to print the result with 9 digits of precision, round half up.

Sample Input

2
1 1
0 0

Sample Output

Case 1: 2.000000000
Case 2: 1.000000000
思路:我们可以得到:2^a=x,2^b=y。所以ans=log2(2^a+2^b)。我们假设a比b小(其实无所谓,因为如果a大的话,我们交换一下即可),那么进一步化简得到ans=a+log2(1+2^(b-a))。然后根据数学极限的近似计算,ClearY证明在题目要求的精度范围内,b-a>34的情况下1+2^(b-a)近似等于2^(b-a)。然后就可做了。orz….
然后这道题还学到了一个知识点就是:
BigDecimal.setScale()方法可以格式化小数点的位置。
setScale(1)表示保留一位小数,默认用四舍五入方式。
setScale(1,BigDecimal.ROUND_DOWN)直接删除多余的小数位,如2.35会变成2.3
setScale(1,BigDecimal.ROUND_UP)进位处理,2.35变成2.4,直接进位
setScale(1,BigDecimal.ROUND_HALF_UP)四舍五入,2.35变成2.4
setScaler(1,BigDecimal.ROUND_HALF_DOWN)四舍五入,2.35变成2.3,如果是5则向下舍

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注