多易javaSE基础 day5 课程日志 π后10000位的输出

今天也没有开始RPC项目.浏览了一下发现缺乏的知识很多,得补一下才可以尝试.
今天练习了BigDecimal类的用法,解决了很久之前不会实现的输出π小数点后10000位的问题.

package day04;

/**
* 使用马青公式输出π小数点后10000位  BigDecimal练习
*
* */
//π = 4*( 4*( 1/1*5^1 - 1/3*5^3 + 1/5*5^5 -...) - ( 1/1*239^1 - 1/3*239^3 + 1/5*239^5 ) )
//   =     4* 1/1*5^1 - 1/1*239^1 - 4 * 1/3*5^3 + 1/3*239^3 +.......

//马青公式:π=16(arctan1/5)−4(arctan1/239)

import java.math.BigDecimal;

public class Demo2_2Circle {
    public static void main(String[] args) {
        BigDecimal one = BigDecimal.ONE;
        BigDecimal b2 = new BigDecimal("2");
        BigDecimal b4 = new BigDecimal("4");
        BigDecimal b5 = new BigDecimal("5");
        BigDecimal b239 = new BigDecimal("239");

        BigDecimal b25 = new BigDecimal("25");
        BigDecimal b57121 = new BigDecimal("57121");

        BigDecimal fm1 = BigDecimal.ONE;    //分母的乘数
        BigDecimal sum = BigDecimal.ZERO;                 //每次循环的结果
        //BigDecimal result;              //最终结果
        BigDecimal r1;      // 1/5的各项结果
        BigDecimal r2;      // 1/239的各项结果

        int i=0;
        int n=10003;        //循环次数
        int flog = 1;       //符号判断位

        while(i<n){
            i++;
            r1 = one.divide(fm1.multiply(b5),n,BigDecimal.ROUND_DOWN).multiply(b4);      // r1 = 4* 1/1*5^1
            r2 = one.divide(fm1.multiply(b239),n,BigDecimal.ROUND_DOWN);                 // r2 = 1/1*239^1

            if(flog == 1){      //符号处理      临项符号反转
                sum = sum.add(r1.subtract(r2));          // sum = sum + r1 - r2
                flog = -1 ;
            }else{
                sum = sum.add(r2.subtract(r1));         //  sum = sum + r2 - r1
                flog = 1 ;
            }

            fm1 = fm1.add(b2);                  //1--3--5...
            b5 = b5.multiply(b25);              //5--5^3--5^5...
            b239 = b239.multiply(b57121);       //239--239^3--239^5...

        }

        System.out.println(sum.multiply(b4).toString().substring(0,10002));

    }
}

课上敲了水仙花数

package day04;

/***
 * 水仙花数
 */

public class Demo3 {
    public static void main(String[] args) {
        for (int i = 100; i <1000 ; i++) {
            int g = i%10;
            int s = i%100/10;
            int b = i/100;

            if(Math.pow(g,3)+Math.pow(s,3)+Math.pow(b,3)==i)
                System.out.println(i);
        }
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_44855583/article/details/107619840