32 lines
1022 B
Java
32 lines
1022 B
Java
package Course_Codes;
|
|
|
|
import java.math.BigDecimal;
|
|
|
|
public class 计算PI小数点后n位 {
|
|
|
|
public static void main(String[] args) {
|
|
int n=1000;
|
|
PI(n);
|
|
}
|
|
|
|
public static void PI(int n) {
|
|
BigDecimal qian=BigDecimal.ZERO;//前半部分
|
|
BigDecimal hou=BigDecimal.ZERO;//后半部分
|
|
BigDecimal ans=BigDecimal.ZERO;//最后存放pi
|
|
int jd=1000;//精确到小数点后1000位
|
|
for(int i=0;i<n;i++) {
|
|
BigDecimal de5=new BigDecimal("1").divide(new BigDecimal(2*i+1+"")
|
|
.multiply(new BigDecimal("5").pow(2*i+1)),jd,BigDecimal.ROUND_DOWN);
|
|
|
|
BigDecimal de239=new BigDecimal("1").divide(new BigDecimal(2*i+1+"")
|
|
.multiply(new BigDecimal("239").pow(2*i+1)),jd,BigDecimal.ROUND_DOWN);
|
|
|
|
BigDecimal fh=new BigDecimal((i%2==0?1:-1)+"");//判断正负号
|
|
qian=qian.add(de5.multiply(fh));
|
|
hou=hou.add(de239.multiply(fh));
|
|
}
|
|
ans=new BigDecimal("16").multiply(qian).subtract(new BigDecimal("4").multiply(hou));
|
|
System.out.println(ans.toString());
|
|
}
|
|
}
|