Description:
Given an integer n, return the number of trailing zeroes in n!.
Example 1:
Input: 3
Output: 0
Explanation: 3! = 6, no trailing zero.
提交的代码如下:
class Solution(object):
def trailingZeroes(self, n):
result=0
while n:
result+=n//5
n=n//5
return result
分析:n的阶乘的计算公式就是。题目是求改表达式的结果中末尾的0的个数。这道题可以看做是从1到n的任意两个数相乘会出现个10的倍数,这取决于两个两个乘数的个位数。而从1到9的任意两个数的乘法中,的结果是10的倍数。按照这种解释,我们可以认为我们要求的就是1到n中的偶数个数与能被5整除的数字的个数的最小值了,前一个数字比后一个数字大,所以该阶乘表达式的结果取决于能被5整除的数字的个数。如果按照这个思路提交代码为会发现报错。以30的阶乘为例,预期结果为7,但是我们返回的却是6。 问题出来哪里呢?问题出在25这个数字上,如果25和2相乘得到50,抛去末尾的0之外又产生了一个5。换一种解释就是,我们可以将25拆分成,这样把25当成两个5就可以了。
综上,我们实际要求的就是从1到n的所有整数当中,对其进行因式分解后,所有的因子中的5的个数之和。最后提交的代码如上。