用c语言求n!(1<=n<=10000),并统计输出n!中数字“0”的个数和n!中末尾“0”的个数。
时间: 2024-09-20 22:15:51 浏览: 65
C语言上机 | 求1! ~n! 的值
在C语言中,计算大整数阶乘(n!)并统计"0"的个数以及末尾"0"的个数,可以采用长整型数组来存储中间结果,并利用模运算判断是否含有5*2=10因子,因为一个因数5会产生一个末尾的0,而每个2都会产生另一个0(直到有剩余的5)。以下是简单的步骤:
1. 定义一个数组`factorial`用于存放阶乘的结果,初始化为1。
2. 使用循环从2到n遍历,每次将当前数乘以`factorial`并将结果存回数组。
3. 对于每个乘法操作,同时检查是否有足够多的2来配对5(即检查是否存在因子2的数量),并增加相应的计数。
4. 计算结束后的数组元素就是n!,然后遍历该数组计算实际末尾0的数量。
下面是示例代码:
```c
#include <stdio.h>
#include <math.h>
// 函数声明
long long factorial(int n);
int zeros_in_factorial(long long num);
int main() {
int n;
printf("请输入一个1 <= n <= 10000 的正整数: ");
scanf("%d", &n);
// 计算阶乘
long long fact = factorial(n);
// 输出阶乘及其末尾0的数量
printf("n! = %lld\n", fact);
printf("n!中数字0的个数: %d\n", zeros_in_factorial(fact));
return 0;
}
// 计算阶乘
long long factorial(int n) {
long long fact = 1;
for (int i = 2; i <= n; ++i) {
fact *= i;
}
return fact;
}
// 统计末尾0的数量
int zeros_in_factorial(long long num) {
int count = 0;
while (num > 0) {
num /= 10; // 移除末位
count += num >= 5; // 当num大于等于5时,说明之前存在足够的5配合2产生0
}
return count;
}
```
阅读全文