点击查看:蓝桥杯历年真题 题解目录
黄金连分数
答案: 6180339887498948482045868343656381177203091798057628621354486227052604628189024497072072041893911374
解析:
1. 要讲本题转换为斐波那契
2. 用BigDecimal计算结果
3. 使用BigDecimal的除法时,若结果为无限小数,则要指定运算的范围
即被除数.divid(除数,范围,BigDecimal_ROUND_HALF_DOWN);
4. 求1小数点后的100位,需要运算结果在101位及之前达到稳定,即传值增大,第101位的数字不在变化。
5. “0.” 在截取字符串时占了两位.
package java_2013_B;
import java.math.BigDecimal;
/**
* @author Ren
*/
public class Main004_黄金连分数 {
public static void main(String[] args) {
BigDecimal ans1 = fb(200).divide(fb(201),110,BigDecimal.ROUND_HALF_DOWN);
BigDecimal ans2 = fb(300).divide(fb(301),110,BigDecimal.ROUND_HALF_DOWN);
BigDecimal ans3 = fb(400).divide(fb(401),110,BigDecimal.ROUND_HALF_DOWN);
BigDecimal ans4 = fb(800).divide(fb(801),110,BigDecimal.ROUND_HALF_DOWN);
System.out.println(ans1.toPlainString().substring(0,103));
System.out.println(ans2.toPlainString().substring(0,103));
System.out.println(ans3.toPlainString().substring(0,103));
System.out.println(ans4.toPlainString().substring(0,103));
}
//求斐波那契
static BigDecimal fb(int n){
BigDecimal a = BigDecimal.ONE;
BigDecimal b = BigDecimal.ONE;
for (int i = 0; i < n; i++) {
BigDecimal t = b;
b = a.add(b);
a=t;
}
return b;
}
}