说明:这个是leetcode上的一个题目,同时据说也是编程之美上的一个题目,那么,自己的解决的过程中遇到了耗时的问题,所以就在此做一个记录,其中,参考了很多网友的意见,在此也就不一一列出了。
法一:
int trailingZeroes(int n)
{
int i,tmp,cnt = 0;
for( i = 5; i <= n; i+= 5 )
{
tmp = i;
while( tmp%5 == 0 && tmp!= 1)
cnt++;
}
return cnt;
}
法二:
int trailingZeroes(int n)
{
int i,cnt = 0;
for( i = 5; i <= n; i*= 5 )
{
cnt += n/i;
}
return cnt;
}
法三:
int trailingZeroes(int n)
{
int cnt = 0;
while (n)
{
n /= 5;
cnt += n;
}
return cnt;
}
其中,三种方法的耗时是递减的,应该说方法二和三很相似,只是方法三更快。