用c语言求算法,满足N!的末尾恰好有k个0的最小的N是多少?如果这样的N不存在输出-1。输入描述:一个整数K。输出描述:一个整数代表答案。用例输入:2。用例输出:10
时间: 2024-12-28 13:36:37 浏览: 66
在C语言中,要计算使得阶乘\( N! \)末尾恰好有k个零的最小正整数N,我们需要理解这些零来自哪里。由于每个因数5都会贡献一个0,而2的因子会形成更多的10(即2×5),所以我们需要关注的是质因数5的数量。
对于\( N = 5^a \cdot b \),其中\( a \)是5的指数,\( b \)是除了5以外的其他质因数的乘积。为了保证末尾恰好有k个0,\( a \geq k \)。因为对于每个额外的5,我们只需要找到一个额外的2即可增加一个0(比如25变成125),所以我们需要找出最大的5的幂次小于或等于k,并将其加到b上。
例如,对于k=2,我们要找最小的\( N \),使其包含两个5作为因数。那么\( N \)应该是5的平方(即25),因为1个5只能提供1个0。
现在,我们可以编写一个函数来解决这个问题:
```c
#include <stdio.h>
int findMinN(int k) {
int minN = 0;
for (int i = 1; ; i++) {
int countOfFives = i / 5; // 计算当前i有多少个5作为因子
if (countOfFives >= k) {
minN = i;
break;
}
}
return minN <= 0 ? -1 : minN;
}
int main() {
int k;
scanf("%d", &k);
printf("%d\n", findMinN(k)); // 输出满足条件的最小N
return 0;
}
```
阅读全文
相关推荐


















