给定一个正整数n,计算n!的尾部0的个数。输入数据有若干行。每行上有一个正整数n,(0<n<32767),对应一种情形。对于每一种情形,先输出“Case #: ”(#为数据序号,从1起),然后输出n的值,逗号,结果,换行。C语言
时间: 2024-10-28 14:08:44 浏览: 9
在C语言中,要计算给定正整数n的阶乘(n!)尾部零的个数,这是因为每一个5和每一个2相乘都会形成一个10,而10转为十进制表示时会以0结尾。因此,我们需要找到n中5和2的数量的最大公约数(LCM),因为最多只能有5的数量限制,因为每个2都包含至少一个5。
以下是实现这个功能的一个简单示例:
```c
#include <stdio.h>
#include <math.h>
// 函数用于计算两个数的最大公约数
int gcd(int a, int b) {
if (b == 0)
return a;
else
return gcd(b, a % b);
}
// 计算n!后尾部0的个数
int countTrailingZeros(int n) {
int zeros = 0;
while (n >= 5) {
zeros += n / 5; // 每次除以5得到的是5的数量
n /= 5; // 更新n,直到n小于5
}
return zeros;
}
int main() {
int case_num = 1;
int n;
while (scanf("%d", &n) == 1 && n < 32767) {
printf("Case #%d: ", case_num);
printf("%d, %d\n", n, countTrailingZeros(n));
++case_num;
}
return 0;
}
```
在这个程序中,`countTrailingZeros`函数计算了n!的尾部0的个数,通过循环不断将n除以5并累加结果,直到n小于5为止。`gcd`函数则是用来辅助处理的,但我们在此场景下不需要它。
阅读全文