题目:
算法思想:尾数中零的个数代表阶乘后的结果包含了多少个10相乘,由于我们无法从阶乘的结果入手,所以需要从因数上入手,判断有多少个10相乘。10=2*5,所以需要找有多少对2*5,而对于自然数来说一个偶数有多个2,而5只来自5 10 15 20 25等等,所以只需要找5的个数。需要注意的是25可以拆成2个5,125可以拆成3个5,所以运算过程应该是先除以5找出单个5的个数,然后把n变成原来的1/5,继续除以5,这是判断25的倍数,接着继续同样的操作,直到n==0。举个例子,假如n是126,126/5==25,表示以5累加的话有25个5,接着n = n/5变成了25,25/5 == 5,这表示以25累加的有5个,分别是25 50 75 100 125,接着n=n/5变成了5,5/5 == 1,这表示以125累加的有1个,是125,把这些累加起来就是结果了。
代码:
int trailingZeroes(int n) {
int result = 0;
while(n != 0)
{
result += n/5;
n = n/5;
}
return result;
}