天天看点

关于计算阶乘

碰到一个例子,用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,如需转载请自行联系原作者