相关题目【题目记录】——ICPC大连2016
这个题目的数据大小达到了
1
0
100
10^{100}
10100,小数部分也应该达到
1
0
−
100
10^{-100}
10−100,JAVA对于精度的限制,有这样的技巧。
在下面的代码中,试图将
5
sqrt{5}
5
的结果的精度逼近
1
0
−
100
10^{-100}
10−100
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
BigDecimal TWO = BigDecimal.valueOf(2);
BigDecimal FIVE = BigDecimal.valueOf(5);
double d=Math.pow(10,-100);
BigDecimal EPS = BigDecimal.valueOf(d);
BigDecimal L = new BigDecimal("2");
BigDecimal R = new BigDecimal("3");
BigDecimal mid = null;
while(R.subtract(L).compareTo(EPS) > 0)
{
mid = L.add(R).divide(TWO);
if(mid.multiply(mid).compareTo(FIVE) < 0)
L=mid;
if(mid.multiply(mid).compareTo(FIVE) > 0)
R = mid;
}
BigDecimal GOLD = mid.add(BigDecimal.ONE).divide(TWO);
BigDecimal a,b;
String str1,str2;
Scanner input = new Scanner(System.in);
while(input.hasNext())
{
str1 = input.next();
str2 = input.next();
a = new BigDecimal(str1);
b = new BigDecimal(str2);
if(solve(a,b,GOLD))
{
System.out.println("1");
}
else{
System.out.println("0");
}
}
}
static boolean solve(BigDecimal a,BigDecimal b,BigDecimal gold)
{
BigDecimal d = a.subtract(b);
if(d.compareTo(BigDecimal.valueOf(0))==-1){
d=d.multiply(BigDecimal.valueOf(-1));
}
d = d.multiply(gold);
BigInteger dd = d.toBigInteger();
d = new BigDecimal(dd.toString());
if (!d.equals(a.min(b))) return true;
else return false;
}
}



