首页 > 编程语言 > 详细

蓝桥杯备赛之大整数-圆周率(Java)

时间:2019-10-27 19:22:40      阅读:87      评论:0      收藏:0      [点我收藏+]

题目描述

     
    •人们创造了上百种方法求圆周率π的值。其中比较常用且易于编程的是无穷级数法。
    •π/4 = 1 – 1/3 + 1/5 – 1/7 + 1/9 - …
    •是初学者特别喜欢的一个级数形式,但其缺点是收敛太慢。
    •π/2 = 1 + 1/3 +1/3*2/5 + 1/3*2/5*3/7 + 1/3*2/5*3/7*4/9 + …
    •是收敛很快的一个级数方法。
    •请你利用这个方法,写出精确到小数点后100位精度的圆周率。
    •注意:尾数的四舍五入! 尾数是0也要保留!
    •显然答案是一个小数,其小数点后有100位数字,请通过浏览器直接提交该数字。
import java.math.BigDecimal;


public class Main {
    public static void main(String[] args)
    {
//      第一种级数方式,太慢了,算不出来,不精确
//        //double PI = 0;
//        BigDecimal PI =BigDecimal.ZERO;
//        BigDecimal j=BigDecimal.ONE;//变量j
//        BigDecimal k=BigDecimal.ONE;//常量k            
//        BigDecimal m=BigDecimal.valueOf(2);//大整数2
//        BigDecimal n=BigDecimal.valueOf(-1);//大整数-1
//        //PI+=1.0/(2*i-1)*a;// 1 -1 1 -1
//        BigDecimal a=BigDecimal.ONE;//变量a 1 -1 1 -1    
//        for(int i=1;i<900000;i++)
//        {
//            PI=PI.add(k.divide(m.multiply(j).subtract(k),105,BigDecimal.ROUND_HALF_UP).multiply(a));//pi+=1/(2*j-1)*a
//            j=j.add(BigDecimal.ONE);//j++;
//            a=a.multiply(BigDecimal.valueOf(-1));
//            //PI=BigDecimal.ONE.divide((2*i-1)*Math.pow(-1,i+1 ));
//        }
//        PI=PI.multiply(BigDecimal.valueOf(2));
//        System.out.print(PI.setScale(100,BigDecimal.ROUND_HALF_UP));
        
        //第二种级数方式1000和2000交叉取数即可
        BigDecimal PI0 =BigDecimal.ONE;//临时pi
        BigDecimal PI1 =BigDecimal.ONE;//真正的pi
        BigDecimal i=BigDecimal.ONE;//变量i            
        BigDecimal j=BigDecimal.ONE;//变量j
        BigDecimal m=BigDecimal.valueOf(2);//大整数2
        BigDecimal n=BigDecimal.valueOf(1);//大整数1
        for(int s=0;s<200;s++)
        {
            PI0=PI0.multiply(i.divide(m.multiply(i).add(n),105,BigDecimal.ROUND_HALF_UP));//PI0*=1/(2*i+1);
            PI1=PI1.add(PI0);
            i=i.add(BigDecimal.ONE);//i++;
        }
        PI1=PI1.multiply(BigDecimal.valueOf(2));
        System.out.print(PI1.setScale(100,BigDecimal.ROUND_HALF_UP));
    }
}

 

蓝桥杯备赛之大整数-圆周率(Java)

原文:https://www.cnblogs.com/skz5725/p/11748455.html

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