天天看點

【藍橋杯】_04黃金連分數文末福利

package java2013B;


import java.math.BigDecimal;
import java.math.BigInteger;

/**
 * @Author bennyrhys
 * @Date 2020-03-09 23:33
 * 标題: 黃金連分數
 * 黃金分割數0.61803… 是個無理數,這個常數十分重要,在許多工程問題中會出現。有時需要把這個數字求得很精确。
 *
 * 對于某些精密工程,常數的精度很重要。也許你聽說過哈勃太空望遠鏡,它首次升空後就發現了一處人工加工錯誤,對那樣一個龐然大物,
 * 其實隻是鏡面加工時有比頭發絲還細許多倍的一處錯誤而已,卻使它成了“近視眼”!!
 *
 * 言歸正傳,我們如何求得黃金分割數的盡可能精确的值呢?有許多方法。
 *
 * 比較簡單的一種是用連分數:
 *                  1
 *     黃金數 = ---------------------
 *                         1
 *              1 + -----------------
 *                           1
 *                  1 + -------------
 *                             1
 *                      1 + ---------
 *                           1 + ... 
 *
 *
 * 這個連分數計算的“層數”越多,它的值越接近黃金分割數。
 *
 * 請你利用這一特性,求出黃金分割數的足夠精确值,要求四舍五入到小數點後100位。
 *
 * 小數點後3位的值為:0.618
 * 小數點後4位的值為:0.6180
 * 小數點後5位的值為:0.61803
 * 小數點後7位的值為:0.6180340
 * (注意尾部的0,不能忽略)
 *
 * 你的任務是:寫出精确到小數點後100位精度的黃金分割值。
 *
 * 注意:尾數的四舍五入! 尾數是0也要保留!
 *
 * 顯然答案是一個小數,其小數點後有100位數字,請通過浏覽器直接送出該數字。
 * 注意:不要送出解答過程,或其它輔助說明類的内容。
 *
 * 1.化為求斐波那契相鄰兩項的比值,到多少項?越多越精确,n/n+1項,n再往上增加,這個比值的小數點後101位是穩定的,也就是不變的
 *
 * 2.double無法表示100位小數,BigInteger和BigDecimal
 */
public class _04黃金連分數 {
    public static void main(String[] args) {
        BigInteger a = BigInteger.ONE;
        BigInteger b = BigInteger.ONE;
        for (int i = 3; i < 300; i++) {
            BigInteger t = b;
            b = a.add(b);
            a = t;
        }
        BigDecimal divide = new BigDecimal(a, 110).divide(new BigDecimal(b, 110), BigDecimal.ROUND_HALF_DOWN);
        System.out.println(divide.toPlainString().substring(0, 103));
        // 進位
        System.out.println(divide.setScale(100,BigDecimal.ROUND_HALF_UP).toPlainString());
    }
}           

文末福利

對了對了,文末發波福利

  1. 通過公衆号提示的關鍵字可以領取競賽資料。但是,有時候會失效,小夥伴可以在背景留言提醒我修複。
  2. 最後一波分享一些很有意義的開源幹貨
藍橋杯必刷真題: https://github.com/bennyrhys/LanQiao 求職必備刷題官網: https://github.com/bennyrhys/interview SpringBoot兩小時快速入門,極客表白浪漫紅包程式 https://github.com/bennyrhys/LuckyMoney-SpringBootProject SpringBoot兩小時快速入門,基因晶片個人資訊程式 https://github.com/bennyrhys/Girl-SpringBootProject SpringBoot之web進階,人類基因晶片程式-提升篇 https://github.com/bennyrhys/GirlPlus-SpringBootProject

小夥伴的支援是我堅持的動力,動動小手,點點(關注、👍、在看)。

繼續閱讀