Java大数阶乘

Java大数阶乘

描述

我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?

输入

输入一个整数m(0

输出

输出m的阶乘,并在输出结束之后输入一个换行符

样例输入

50

样例输出

30414093201713378043612608166064768844377641568960512000000000000

模拟阶乘

public class Solution {
    public static void main(String[] args) {
        int[] res = new int[3000];  // 存储阶乘的最终结果
        res[0] = 1; // 0和1的阶乘为1

        Scanner sc = new Scanner(System.in);
        System.out.print("请输入 n! 的 n:");
        int n = sc.nextInt();  // 待求阶乘的数
        int top = 0, carry = 0; // 分别表示结果的最高位和进位

        for (int i = 2; i <= n; i++) {  // 一直乘到n,模拟阶乘过程
            for (int j = 0; j <= top; j++) {
                res[j] = res[j] * i + carry;
                carry = res[j] / 10;    // 计算进位
                if (j == top && carry >= 1) {   // 计算到最高位且发现最高位有进位
                    top++;  // 最高位加一
                }
                res[j] = res[j] % 10;   // 取余,把余数存到当前位置
            }
        }
        for (int i = top; i >= 0; i--) {
            System.out.print(res[i]);
        }
    }
}

BigInteger

public class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入 n! 的 n:");
        int n = sc.nextInt();
        BigInteger bi = new BigInteger("1");

        for (int i = 2; i <= n; i++) {
            bi = bi.multiply(new BigInteger(i + ""));
        }
        System.out.println(bi);
        sc.close();
    }
}

你可能感兴趣的:(Java大数阶乘)