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

 

 

 

 

你可能感兴趣的:(log)