其他分享
首页 > 其他分享> > 求1到n的阶乘累加和

求1到n的阶乘累加和

作者:互联网

package class01;
/**
 * 给定一个参数N,
 * 返回:1!+2!+3!+...+N! 的结果。
 * (即:求1的阶乘到N的阶乘的累加和。)
 */
public class Code01_SumOfFactorial {
    public static void main(String[] args) {
        int N = 10;
        System.out.println(f1(N));
        System.out.println(f2(N));
    }

    //方法1:先求单个数的阶乘,再把每一个单个数的阶乘,累加起来。
    public static long f1(int N) {
        long ans = 0;
        for (int i = 1; i <= N; i++) {
            ans += factorial(i);//把每一个数的阶乘,累加。
        }
        return ans;
    }

    public static long factorial(int N) {//求N的阶乘
        long ans = 1;
        for (int i = 1; i <= N; i++) {
            ans *= i;
        }
        return ans;
    }

    //方法2:用一个变量cur,来记录每一个数的阶乘。在用ans,来记录1的阶乘,到N的阶乘的累加和。
    public static long f2(int N) {
        long ans = 0;
        long cur = 1;
        for (int i = 1; i <= N; i++) {
            cur = cur * i;//没有写成cur *= i;为了更好地理解:上一轮的阶乘(等号右边的cur),乘上这一轮的数字(即i),就是这一轮的阶乘(等号左边的cur)。
            // 也就是说,每一个当前阶乘的结果,都是踩着上一步的结果,乘上i得来的。(复用了上一步的结果)。
            ans += cur;
        }
        return ans;
    }
}

 

标签:f1,int,System,累加,阶乘,public
来源: https://www.cnblogs.com/TheFloorIsNotTooHot/p/16345785.html