首页 > 编程语言 > 详细

高精度小数BigDecimal+二分——java

时间:2019-11-01 00:41:37      阅读:98      评论:0      收藏:0      [点我收藏+]

高精度小数第一题

import java.util.*;
import java.math.*;

public class Main {
    public static void main(String []args) {
        Scanner cin=new Scanner(System.in);
        
      //求最靠近sqrt(5)的值mid
        BigDecimal esp=new BigDecimal("0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001");
        BigDecimal L=new BigDecimal("2");
        BigDecimal R=new BigDecimal("3");
        BigDecimal mid=L;
        while(true) {
            BigDecimal dis=R.subtract(L);
            if(dis.abs().compareTo(esp)<=0)break;
            
            mid=L.add(R).divide(new BigDecimal("2"));
            if(mid.multiply(mid).compareTo(new BigDecimal("5"))<=0)//mid偏小
                L=mid;
            else 
                R=mid;
        }
        //System.out.println(mid);
        
        String sa,sb;
        while(cin.hasNext()) {
            sa=cin.next();
            sb=cin.next();
            
            BigDecimal a=new BigDecimal(sa);
            BigDecimal b=new BigDecimal(sb);
            if(a.compareTo(b)>0) {
                BigDecimal tmp=a;
                a=b;
                b=tmp;
            }
            BigDecimal k=b.subtract(a);
            
            //c=(sqrt(2)+1)/2
            BigDecimal c=mid.add(BigDecimal.ONE);
            c=c.divide(new BigDecimal("2"));
            
            BigDecimal res=c.multiply(k);
            res=res.setScale(0,BigDecimal.ROUND_FLOOR);
            
            //System.out.println(res);
            
            if(res.equals(a)) 
                System.out.println("0");
            else System.out.println("1");
        }
    }
}

 

高精度小数BigDecimal+二分——java

原文:https://www.cnblogs.com/zsben991126/p/11774529.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!