对一个正整数n,求出n!中末尾0的个数。

对一个正整数n,求出n!中末尾0的个数。

输入

输入有若干行。每一行上有一个整数T,是测试数据组数,接着有T行,每一行包含一个确定的正整数n(n≤1000000000)。

输出

对输入行中的每一个数据n,输出一行,其内容是n!中末尾0的个数。

输入样例                              输出样例

3                                     

3                                     0

100                                   24

1024                                  253      

 

下边的代码只是解法的核心部分。   

 

#include <stdio.h>
void main()
{
__int64 n,i,t,two=0,five=0,sum;
scanf("%I64d",&n);
for (i=1;i<=n;i++)
{
t=i;
while (t%2==0 && t!=1)
{
two++;
t/=2;
}
t=i;
while (t%5==0 && t!=1)
{
five++;
t/=5;
}
}
sum = (two>five?five:two);
printf("%I64d\n",sum);
}

 //今天看了《编程之美》,原来代码可以如此简单。。。还有一种更快的解法、也很巧妙

#include <stdio.h>
void main()
{
    __int64 n,i,t,five=0;
    scanf("%I64d",&n);
    for (i=1;i<=n;i++)
    {
        t=i;
        while (t%5==0 && t!=1)
        {
            five++;
            t/=5;
        }
    }
    printf("%I64d\n",five);
}

 

posted @ 2012-03-18 22:34  ZH奶酪  阅读(2876)  评论(0编辑  收藏  举报