且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

关于计算阶乘

更新时间:2022-09-10 07:56:49

碰到一个例子,用while循环方法计算1+1/2!+1/3!+...1/20!

刚开始的时候以为阶乘能直接写,像这样

1
2
3
4
5
6
7
8
9
10
11
12
package com.lixiyu;
public class Count1 {
public static void main(String[] args){
    int i=1;
    int sum=0;
    while(i<=20){
        sum+=(1/i!);
        i++;  
    }
    System.out.println("sum="+sum);
}
}

就一直在阶乘的位置“!”提示错误:java Syntax error on token "!", delete this token

后来想是不是 !不能直接拿来用的,谷歌一下,发现原来要调用数学式的一个包:java.math.BigDecimal

不过看了API文档没把这个用法给弄清楚。一知半解

先把源码贴出来,慢慢琢磨

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package com.lixiyu;
import java.math.BigDecimal;
public class Count1 {
    public static void main(String args[]) {
        BigDecimal sum = new BigDecimal(0.0); // 和
        BigDecimal factorial = new BigDecimal(1.0); // 阶乘项的计算结果
        int i = 1// 循环增量
        while (i <= 20) {
            sum = sum.add(factorial); // 累加各项阶乘的和
            ++i; // i加1
            factorial = factorial.multiply(new BigDecimal(1.0 / i)); // 计算阶乘项
        }
        System.out.println("1+1/2!+1/3!···1/20!的计算结果等于:\n" + sum); // 输出计算结果
    }
}

编译运行结果:

1
2
1+12!+13!···120!的计算结果等于:
1.7182818284590452236725888.............

本文转自lixiyu 51CTO博客,原文链接:http://blog.51cto.com/lixiyu/1302890,如需转载请自行联系原作者