C语言问题 1*2*3*...*1000结果是一个很大的数,求这个数末尾有多少个连续的零。

来源:百度知道 编辑:UC知道 时间:2024/05/27 09:28:05
代码解释一下。。。
谢谢哈!

零是由2和5相乘得到的,你只要求出1000!里面包含多少了5就行了,因为2的个数是肯定比5多的,所以有多少个5数末就有多少连续的0.
代码
#include <stdio.h>
#include <stdlib.h>

int f(int n)//求n!里面包含多少个因子5
{
if (n < 5) return 0;
return n / 5 + f(n / 5);
}

int main()
{
printf("%d\n", f(1000));
system("pause");
return 0;
}
f(1000)即为所求299个
大概解释一下
1 * 2 * 3 * 4 * 5 * …… * 1000
里面能被5整除的有5,10,15,……,1000
这些数正好是1000 / 5个,剩下的那些数不包含5,但是5,10,15,……,1000 里面还包含5,我们先把他们都除以5,因为都已经算过一个5了,得到
1,2,3,……,200然后用相同的方法递归计算200!里面有多少个5,就这样
-------------------------
数学啊。。。。。。 别说是1000了1亿的阶乘后面有多少个连续0都可以算
如果你对1000!有多少位有兴趣的话,我也可以告诉你^_^

老实说,这个算法并没有公式,所以就不要想这个问题了,而且就算有,其零的个数,也远远比你的内存的总共的容量还要不知道大多少个0,或者说,不过你的内存是多少GB,只是这个数的零头零头都不到。

一直乘到20,即20!,就已经是个64位整数(long long int)了

1开始的自然数到某个数连续相乘,结果最后有多少个0
其实就是看这些数的因子里有多少个5,因为5和2相乘结果就是10
结尾所有的0都是这样形成的,因为2的数量肯定大于5,所以只要计算出
5的个数就可