标签:
Given an integer n, return the number of trailing zeroes in n!
这是LeetCode Online Judge上的一个原题:给定一个n,求n!中,末尾0的个数。
当到这是,很愉快地解决了为题,洋洋洒洒写到以下代码:
class Solution { public: int trailingZeroes(int n) { int count5 = 0; for(int i=1 ; i<=n ; i++) { int temp = i; while (temp%5 == 0) { ++count5; temp /= 5; } } return count5; } };
在LeetCode上一提交,呀,报错了!!!超时了,Last executed input:1808548329。
这时候一百度,看到博客园上有人有更简单的方法啦:http://www.cnblogs.com/ganganloveu/p/4193373.html。仔细一看,很有道理呀,但是有点看不懂,再百度一下,好了,问题全解决了,正确的思路应该继续往下想:
3. 1-n中,只有5的倍数,才含有因子5。1-5,6-10,11-15,16-20,21-25……可以看出,1-n中有n/5个数字是5的倍数;但25的倍数的数字至少应该有2个含5的因子(25=5*5);以此类推,125的倍数的数字至少含有3个5的因子……顾而程序可以修改为:
class Solution { public: int trailingZeroes(int n) { int count5 = 0; while(n) { count5 += n/5; n /= 5; } return count5; } };
完美解决!!!
所以,这题留给我们的思考是,看到代码不要直接提笔就写,要多想,多思考,多推算,有很多方法值得借鉴!!!!
Factorial Trailing Zeroes(析因,求尾随个0个数)
标签:
原文地址:http://www.cnblogs.com/HanEichy/p/4257236.html