C语言---求n的阶乘后面有多少个连续的0
题目描述:给定一个正整数n,返回n的阶乘尾部连续0的个数。
例如:(5,5*4*3*2*1=120,则返回1),(10,10*9*8*7*6*5*4*3*2*1=3628800,则返回2)
题目分析:首先拿到这道题,直接可以想到最简单的方法就是,通过循环算出这个值,然会取个位,减个位,统计一下个数即可。但是运行后就发现不可行,因为如果n稍微大一点,则算出的这个值就太大了,保存不了,且运行超时,所以这种方法不可行。
于是就得想别的方法了,最后上网查资料发现还有一种巧妙的解法,那就是将可以造成尾部出现0的情况进行分析,发现10可以由2*5造成,发现20可以由2*2*5造成,发现100可以由2*2*5*5造成。。。
多试几组数据,可以发现其规律:尾部0的个数等于min{2的个数,5的个数}
因为尾部的0是由2*5得来的,虽然也可能是4*5得来的,但是4也是由2*2得来的,所以尾部的0根本上是由2*5得来的。
这里可以发现:一对2和5可以造成尾部一个0,n对2和5可以造成尾部n个0,但是由于2可以由