(Java)求n的阶乘

(Java)求n的阶乘

  • 当n较小时,求n!
  • 当n较大时,求n!

一、当n较小时,求n!

当n整数值较小时,无须考虑n!是否会超出数据类型的范围

1、递归求n!

public static long getNFactorial(int n){
        if(n==0){
            return 1l;
        }
        return n*getNFactorial1(n-1);
    }

2、非递归求n!

    public static long getNFactorial1(int n){
        if(n==0){
            return 1l;
        }
        long sum=1l;
        for(int i=1;i<=n;i++){
            sum=sum*i;
        }
        return sum;
    }

二、当n较小时,求n!

当n整数值较大时,n!会超出数据类型的范围,使用数组模拟大数的乘法
思路:主要在进位的考虑
1*2*3*4*5=120 在数组中为021
数组中 021 *6= 0 2 7

public static void getNFactorial(int n) {
        int num[] = new int[1000];
        int i, j;
        if (n == 1 || n == 0) {
            System.out.println(1);
        } else {
            int p, h;// p 存放当前结果的位数,h为进位;
            p = 1;
            h = 0;
            num[1] = 1;
            for (i = 2; i <= n; i++) {
                // 使得a[]的每位与i相乘
                for (j = 1; j <= p; j++) {
                    num[j] = num[j] * i + h;
                    h = num[j] / 10;
                    num[j] = num[j] % 10;
                }
                // 表示向新的位置进位
                while (h > 0) {
                    num[j] = h % 10;
                    h = h / 10;
                    j++;
                }
                p = j - 1;
            }
            for (i = p; i >= 1; i--) {
                System.out.print(num[i]);
            }
        }
    }

版权声明:本文为wangchuanqi1234原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。