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

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

输入

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

输出

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

输入样例                         输出样例

3                                     

3                                     0

100                                 24

1024                               253           

 

 

这道题想了好久,一直都没做出来。

我一开始想到数每个数末尾0的个数,然后发现50也行,再然后发现25或75也行,再后来随着样本的扩大,发现375也行,这是我就发现是我的想法有问题了~~

后来从网上找了答案:

#include

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++;printf(“%I64d   %I64d   %I64dn”,i,t,five);

           t/=5;

       }

   }

   printf(“%I64dn”,five);

}

 

发现应该数每个数的5的因数有多少~~

 

PS:还发现  

__int64 n ;这样可以定义超长的整形哎~~~

printf(“%I64dn”,i); 这样输出超长整形哦~~~

 

 

参考:http://www.cnblogs.com/CheeseZH/archive/2012/03/18/2405203.html

对一个正整数n,求出n!中末尾0的个数。》上有1条评论

  1. Pingback引用通告: BZ编程小组 作品 | BZ编程小组

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.