蓝桥杯 黄金连分数(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的使用)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cnblog项目--20190309
- 下一篇: 20行以内python代码画出各种减压图