高分悬赏提问!Java语言计算100的阶乘的精确值,并且统计结果有多少个0

高分悬赏提问!Java语言计算100的阶乘的精确值,并且统计结果有多少个0

请写出完整的程序,谢谢了

public static void main(String[] args) {
        BigDecimal n = new BigDecimal(100);
        BigDecimal one = new BigDecimal(1);
        BigDecimal res = n;
        while(n.compareTo(one)>0){
            res = res.multiply(n.subtract(one));
            n = n.subtract(one);
        }
        System.out.println(res);
        String result = res.toString();
        int count = 0;
        for(int i=0;i<result.length();i++){
            if("0".equals(String.valueOf(result.charAt(i)))){
                count+=1;
            }
        }
        System.out.println("100的阶乘的结果中0的数量:"+count);
    }

public class Main {

private static void do_bigFactorial(int bigInteger) {
    int pos = 0;//
    int digit;// 数据长度
    int a, b;
    int m = 0;// 统计输出位数
    int n = 0;// 统计输出行数
    int sum0 = 0;//统计结果为0的个数
    double sum = 0;// 阶乘位数
    for (a = 1; a <= bigInteger; a++)// 计算阶乘位数
    {
        sum += Math.log10(a);
    }
    digit = (int) sum + 1;// 数据长度

    int[] fact = new int[digit];// 初始化一个数组
    fact[0] = 1;// 设个位为 1

    for (a = 2; a <= bigInteger; a++)// 将2^bigInteger逐个与原来的积相乘
    {
        for (b = digit - 1; b >= 0; b--)// 查找最高位{}
        {
            if (fact[b] != 0) {
                pos = b;// 记录最高位
                break;
            }
        }

        for (b = 0; b <= pos; b++) {
            fact[b] *= a;// 每一位与i乘
        }
        carry(fact, pos);
    }

    for (b = digit - 1; b >= 0; b--) {
        if (fact[b] != 0) {
            pos = b;// 记录最高位
            break;
        }
    }
    System.out.println(bigInteger + "阶乘结果为:");
    for (a = pos; a >= 0; a--)// 输出计算结果
    {
        System.out.print(fact[a]);
        if(fact[a]==0) sum0++;
        m++;
        if (m % 5 == 0) {
            System.out.print(" ");
        }
        if (40 == m) {
            System.out.println("");
            m = 0;
            n++;
            if (10 == n) {
                System.out.print("\n");
                n = 0;
            }
        }
    }
    System.out.println("\n" + "阶乘共有: " + (pos + 1) + " 位");
    System.out.println("\n" + "结果为0的个数共有: " + sum0+ "个");
}

private static void carry(int[] bit, int pos) {
    int i, carray = 0;
    for (i = 0; i <= pos; i++)// 从0到pos逐位检查是否需要进位
    {
        bit[i] += carray;// 累加进位
        if (bit[i] <= 9) // 小于9不进位
        {
            carray = 0;
        } else if (bit[i] > 9 && i < pos) // 大于9但不是最高位
        {
            carray = bit[i] / 10; // 保存进位值
            bit[i] = bit[i] % 10; // 得到改位的一位数
        } else if (bit[i] > 9 && i >= pos) // 大于9且是最高位
        {
            while (bit[i] > 9) // 循环向前进位
            {
                carray = bit[i] / 10; // 计算进位值
                bit[i] = bit[i] % 10; // 当前的一位数
                i++;
                bit[i] = carray;
            }
        }

    }
}

public static void main(String[] args)
{
do_bigFactorial(100);
}

}