POJ 1401

来源:互联网 发布:pkpm钢结构计算软件 编辑:程序博客网 时间:2024/06/06 01:12


题意:计算一个数的阶乘中末位连续0的个数
思路(转载):
每次只计算最多含有5,5^2,5^3……的数字个数
每次含有5的[n/5]
........25.[n/25]

注意,当统计最多含有5^2的因子的时候,5的个数应该为[n/25]而不是[n/25]*2因为,在含有[n/5]的时候已经统计过一次了
所以,只需要把[n/5],[n/25]...加起来就可以了

例如1~100中
(1)含有5的:5,10,15....总计100/5=20个,每个之中含有1个5,总5因子数为20
(2)含有25的:25,50,75,100,总计100/25=4个,每个之中含有2个5,但是因为在(1)中含5的数字已经统计过一次因子,所以这里仍然记录因子个数1*5个
。。。。所以1~100中含有5的因子一共100/5+100/25=24个

1~N中的所有数字相乘,能拆分成的最简形式为素数的相乘(1忽略),其中2的个数多于5的个数(2的倍数多于5的倍数),所以,N!中,因子5有多少个,最后N!的末尾的0就有多少个。

 

 

代码:

#include<stdio.h>
int main()
{
   int i,n,num,count;
   scanf("%d",&n);
   while(n--)
   {
      count=0;
      scanf("%d",&num);
      for(i=5;i<=num;i*=5)
         count+=num/i;
      printf("%d\n",count);
   }
   return 0;
}

原创粉丝点击