FZU 2036 Log Calculator

思路:数学题!

给定a,b,求s=log2(2a+2b);转化为s=b+log2(2a-b+1),(a>b).

测试可以知道,当x>=32时,在精度范围内log2(2x+1)=x。否则将a-b转化为double类型直接计算。

代码如下:

 

 1 import java.math.*;
 2 import java.math.BigDecimal;
 3 import java.util.*;
 4 public class Main {
 5     public static void main(String arg[]){
 6         BigDecimal a,b,c,x,y,z,d,an,ans;
 7         Scanner cin=new Scanner(System.in);
 8         int t=1,tt;
 9         tt=cin.nextInt();
10         an=BigDecimal.valueOf(32);
11         while(tt-->0){
12             a=cin.nextBigDecimal();
13             b=cin.nextBigDecimal();
14             if(a.compareTo(b)>0){
15                 c=a.subtract(b);
16                 d=b;
17                 ans=a;
18             }else{
19                 c=b.subtract(a);
20                 d=a;
21                 ans=b;
22             }
23             if(c.compareTo(an)<0){
24                 double s=c.doubleValue();
25                 s=Math.pow(2.0,s)+1;
26                 s=Math.log(s)/Math.log(2.0);
27                 ans=d;
28                 ans=ans.add(BigDecimal.valueOf(s));
29             }
30             ans = ans.setScale(9, BigDecimal.ROUND_HALF_UP);
31             System.out.println("Case "+t+": "+ans);
32             t++;
33         }
34     }
35 }
View Code

 

 

 

 

posted @ 2013-10-06 15:14  _随心所欲_  阅读(339)  评论(0编辑  收藏  举报