天天看點

關于計算階乘

碰到一個例子,用while循環方法計算1+1/2!+1/3!+...1/20!

剛開始的時候以為階乘能直接寫,像這樣

1

2

3

4

5

6

7

8

9

10

11

12

<code>package</code> <code>com.lixiyu;</code>

<code>public</code> <code>class</code> <code>Count1 {</code>

<code>public</code> <code>static</code> <code>void</code> <code>main(String[] args){</code>

<code>    </code><code>int</code> <code>i=</code><code>1</code><code>;</code>

<code>    </code><code>int</code> <code>sum=</code><code>0</code><code>;</code>

<code>    </code><code>while</code><code>(i&lt;=</code><code>20</code><code>){</code>

<code>        </code><code>sum+=(</code><code>1</code><code>/i!);</code>

<code>        </code><code>i++;  </code>

<code>    </code><code>}</code>

<code>    </code><code>System.out.println(</code><code>"sum="</code><code>+sum);</code>

<code>}</code>

就一直在階乘的位置“!”提示錯誤:java Syntax error on token "!", delete this token

後來想是不是 !不能直接拿來用的,谷歌一下,發現原來要調用數學式的一個包:java.math.BigDecimal

不過看了API文檔沒把這個用法給弄清楚。一知半解

先把源碼貼出來,慢慢琢磨

13

14

15

<code>import</code> <code>java.math.BigDecimal;</code>

<code>    </code><code>public</code> <code>static</code> <code>void</code> <code>main(String args[]) {</code>

<code>        </code><code>BigDecimal sum = </code><code>new</code> <code>BigDecimal(</code><code>0.0</code><code>); </code><code>// 和</code>

<code>        </code><code>BigDecimal factorial = </code><code>new</code> <code>BigDecimal(</code><code>1.0</code><code>); </code><code>// 階乘項的計算結果</code>

<code>        </code><code>int</code> <code>i = </code><code>1</code><code>; </code><code>// 循環增量</code>

<code>        </code><code>while</code> <code>(i &lt;= </code><code>20</code><code>) {</code>

<code>            </code><code>sum = sum.add(factorial); </code><code>// 累加各項階乘的和</code>

<code>            </code><code>++i; </code><code>// i加1</code>

<code>            </code><code>factorial = factorial.multiply(</code><code>new</code> <code>BigDecimal(</code><code>1.0</code> <code>/ i)); </code><code>// 計算階乘項</code>

<code>        </code><code>}</code>

<code>        </code><code>System.out.println(</code><code>"1+1/2!+1/3!···1/20!的計算結果等于:\n"</code> <code>+ sum); </code><code>// 輸出計算結果</code>

編譯運作結果:

<code>1</code><code>+</code><code>1</code><code>/</code><code>2</code><code>!+</code><code>1</code><code>/</code><code>3</code><code>!···</code><code>1</code><code>/</code><code>20</code><code>!的計算結果等于:</code>

<code>1.7182818284590452236725888</code><code>.............</code>

本文轉自lixiyu 51CTO部落格,原文連結:http://blog.51cto.com/lixiyu/1302890,如需轉載請自行聯系原作者