今天也没有开始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);
}
}
}