给定一个正整数n,计算n!的尾部0的个数。 输入 输入数据有若干行。每行上有一个正整数n,(0<n<32767),对应一种情形。 输出 对于每一种情形,先输出“Case #: ”(#为数据序号,从1起),然后输出n的值,逗号,结果,换行。 样例输入 Copy 8 20 100 样例输出 Copy Case 1:8,1 Case 2:20,4 Case 3:100,24 用c语言
时间: 2025-03-09 13:16:01 浏览: 91
### 计算正整数 n 阶乘末尾零的个数
为了计算给定正整数 \( n \) 的阶乘结果中尾部 0 的数量,可以采用一种高效的方法:统计因子 5 的个数。因为每个 10 是由两个质因数 2 和 5 构成的,在大多数情况下,因子 2 总是比因子 5 更多,因此只需要关注因子 5 的数量即可。
#### 实现思路
对于每一个不大于 \( n \) 并能被 5 整除的数,都会贡献至少一个因子 5;而像 25、125 这样的特殊数值则会分别提供额外的一个或多个因子 5。所以可以通过不断除以 5 来累加这些因子的数量[^1]。
下面是一个完整的 C 语言程序示例:
```c
#include <stdio.h>
// 函数用于返回n!结尾处有多少个'0'
int countTrailingZeros(int n) {
int count = 0;
while (n >= 5) {
n /= 5; // 不断减少n直到它小于5为止
count += n; // 将每轮的结果相加以得到总的‘0’数目
}
return count;
}
int main() {
int t, n;
scanf("%d", &t); // 测试案例总数
for (int i = 0; i < t; ++i) { // 多组测试数据处理
scanf("%d", &n);
printf("Case #%d: %d\n", i + 1, countTrailingZeros(n)); // 格式化输出
}
return 0;
}
```
此代码片段实现了对多组测试数据的支持以及格式化的输出形式。通过 `scanf` 获取用户输入的数据量,并在一个循环体内逐一对每个测试用例调用函数 `countTrailingZeros()` 来获取并打印相应的结果。
阅读全文
相关推荐













