C语言
代码报错但是系统并没有显示(加粗)报错的地方,而且输入1,2,3程序能算出正确答案,4以后就不行了


这个题目没有这么简单的,其实算到4!!的时候,数据已经爆了,因为24!数非常大,按正常算法算不出来的.需要特别处理的算法,我们知道末尾为0的前提条件是2*5相乘,我们只需要把所有乘数分解只需要提取N个2和M个5相乘即可,根据数值分析知道,2的个数远远大于5的个数,所以我们只需要求5的个数就可以了。源码如下:
#include <stdio.h>
__int64 fact(int n);
void faceEx(int *count_5, __int64 guodu);
int main(void) {
int n,i;
__int64 guodu;
int count_5=0;
scanf("%d", &n);
for(i = 1; i <= n; i++) {
guodu = fact(i);
faceEx(&count_5,guodu);
}
printf("%d", count_5);
return 0;
}
__int64 fact(int n) {
int i;
__int64 product;
product = 1;
for (i = 2; i <= n; i++) {
product = product * i;
}
return product;
}
void faceEx(int *count_5, __int64 guodu){
__int64 i,temp;
for(i=5;i<=guodu;i++){
temp = i;
while(temp%5==0){
(*count_5)++;
temp = temp /5;
}
}
}
其实代码还有点问题,就像前面的问题一样face大于超过数据类型值的上限我们就会错误,上面公式只能求到20!即n<=20,超过20也会报错