求n!(1<=n<=10000),并统计输出n!中数字“0”的个数和n!中末尾“0”的个数。C语言 带注释
时间: 2024-05-25 11:17:51 浏览: 100
#include <stdio.h>
int main()
{
int n, i, j, count1 = 0, count2 = 0;
scanf("%d", &n); // 输入n
int f[10001] = {1}; // 定义一个数组f,用于存储n的阶乘,初始值为1
for(i = 2; i <= n; i++) // 从2开始遍历到n
{
int carry = 0; // 定义进位
for(j = 0; j < 10001; j++) // 遍历f数组
{
int mul = f[j] * i + carry; // 将第j位与i相乘并加上进位,得到当前位的乘积
f[j] = mul % 10; // 将当前位的乘积的个位数存入f数组
carry = mul / 10; // 更新进位
}
}
for(i = 10000; i >= 0; i--) // 从f数组的最高位开始遍历到最低位
{
if(f[i] == 0) // 如果当前位为0
{
count1++; // 统计“0”的个数
}
else // 如果当前位不为0
{
break; // 跳出循环
}
}
for(i = 1; i <= n; i++) // 从1开始遍历到n
{
int num = i; // 将当前数赋值给num
while(num % 5 == 0) // 如果num能被5整除
{
count2++; // 统计末尾“0”的个数
num /= 5; // 将num除以5
}
}
printf("%d\n%d", count1, count2); // 输出“0”的个数和末尾“0”的个数
return 0;
}
阅读全文