高分悬赏提问!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);
}
}