日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

蓝桥杯 黄金连分数(BigDecimal的使用)

發布時間:2025/4/14 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 蓝桥杯 黄金连分数(BigDecimal的使用) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


標題: 黃金連分數


黃金分割數0.61803... 是個無理數,這個常數十分重要,在許多工程問題中會出現。有時需要把這個數字求得很精確。

對于某些精密工程,常數的精度很重要。也許你聽說過哈勃太空望遠鏡,它首次升空后就發現了一處人工加工錯誤,對那樣一個龐然大物,其實只是鏡面加工時有比頭發絲還細許多倍的一處錯誤而已,卻使它成了“近視眼”!!


言歸正傳,我們如何求得黃金分割數的盡可能精確的值呢?有許多方法。

比較簡單的一種是用連分數:

這個連分數計算的“層數”越多,它的值越接近黃金分割數。

請你利用這一特性,求出黃金分割數的足夠精確值,要求四舍五入到小數點后100位。

小數點后3位的值為:0.618
小數點后4位的值為:0.6180
小數點后5位的值為:0.61803
小數點后7位的值為:0.6180340
(注意尾部的0,不能忽略)

你的任務是:寫出精確到小數點后100位精度的黃金分割值。

注意:尾數的四舍五入! 尾數是0也要保留!

顯然答案是一個小數,其小數點后有100位數字,請通過瀏覽器直接提交該數字。
注意:不要提交解答過程,或其它輔助說明類的內容。

?

?注意:由于黃金分割數是無限小數,所以在使用BigDecimal的除法時,要對結果進行精度的限制,否則BigDecimal的結果對象將是無限位的小數,導致報錯。

    連分數的層數設置的大一點,一開始設置100,之后設置200,逐步設置,直到答案不再變化為止(保證100位的精確度)。以下兩個程序都是直接設置的1000.

?

?法一:遞歸

1 public class Demo { 2 3 static BigDecimal bd = BigDecimal.ONE; 4 5 public static void main(String[] args) { 6 System.out.println(f(1000).setScale(100, BigDecimal.ROUND_HALF_UP)); 7 } 8 9 public static BigDecimal f(int x) { 10 if (x == 1) 11 return bd; 12 else 13 return bd.divide(bd.add(f(x - 1)), 200, BigDecimal.ROUND_HALF_UP); 14 15 } 16 17 }

?

?

法二: 循環

1 public class Demo { 2 3 public static void main(String[] args) { 4 BigDecimal bd = new BigDecimal(1); 5 for (int i = 0; i < 1000; i++) {    6 bd = BigDecimal.ONE.add(bd); 7 bd = BigDecimal.ONE.divide(bd, 200, BigDecimal.ROUND_HALF_UP); 8 } 9 System.out.println(bd.setScale(100, BigDecimal.ROUND_HALF_UP)); 10 11 } 12 13 }

?

?

這個題用到了java的小數類 BigDecimal。這個類有一些方法需要記錄。

?

1,有加減乘除的方法,分別是add, substract,multiply,divide.他們的參數都是Bigdecimal類型的字符串。

2,有BigDecimal類型的常數, 例如BigDecimal.ONE。

3,將一個數字或者字符串轉化成BigDecimal格式的數字,只需要使用傳進它的構造方法就可以了。

? ? ? BigDecimal abig=new BigDecimal(10.0);

4,BigDecimal有一個設置數字精度的方法,setScale,在要求精度的比賽中經常用到。他有兩個參數:

? ?第一個是數字,表示小數點后面要精確的位數, 第二個是舍入的方式。

? ?sum.setScale(100, BigDecimal.ROUND_HALF_UP)。

5,關于舍入方式,有以下:

? ? BigDecimal.ROUND_HALF_UP ? ?這個是經常用到的,需要記住,就是經常使用的四舍五入。

? ??BigDecimal.ROUND_HALF_DOWN ?四舍六入。

? ??BigDecimal.ROUND_HALF_EVEN ? ?四舍六入,如果是五,分兩種情況,如果前一位是奇數,則入位,否則舍去。

?

轉載于:https://www.cnblogs.com/FengZeng666/p/10555132.html

總結

以上是生活随笔為你收集整理的蓝桥杯 黄金连分数(BigDecimal的使用)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。