【leetcode】 Factorial_Trailing_Zeroes

来源:互联网 发布:精品家具淘宝店 编辑:程序博客网 时间:2024/05/16 02:46

题目:

Given an integer n, return the number of trailing zeroes in n!.

Note: Your solution should be in logarithmic time complexity.

 /*  * 考虑如下情况:  * 计算23!的末尾有多少0  * 思路:  * 如果要末尾出现0,则必须在乘积中出现  10或者10的倍数。所以在阶乘中找出能有多少个乘积为10或者10的倍数,则知道阶乘有多少个0  * 我们知道只有在  2n*5m 时,才会出现0; 且2的倍数情况多于5,鉴于此,我们只需要统计5的倍数有多少就知道多少个0;  *23/5=4,可知,23!末尾有4个0  *  * 计算101!的末尾有多少0  * 思路:  * 在这里,与上面略微有些区别:最明显一个:假设100,他是增加两个0而不是一个0;  * 此外,例如25.  25*2 =50 ; 此处的确增加一个0;但是50*2=100又增加一个0;(2的数量多于5),所以不能简单的用5来断定0的数目  * 但是我们可以发现如下一个规律:25=5*5   所以每一个25或者25的倍数,都应该多计算一个0;  * 因此对已101: 101/5=20  * 101/25=4  * 101!的阶乘尾部有20+4=24个0  *   * 计算1000!的末尾有多少0  * 思路:  * 同样的问题还存在于5^3之中,以此类推即可。  * */
 public int trailingZeroes(int n) { int count=0; if(n==0) return 0;while(n!=0){count+=n/5;n=n/5;} return count;  }



0 0
原创粉丝点击