阶乘的0
描述
计算n!的十进制表示最后有多少个0
输入
第一行输入一个整数N表示测试数据的组数(1<=N<=100)
每组测试数据占一行,都只有一个整数M(0<=M<=10000000)
输出
输出M的阶乘的十进制表示中最后0的个数
比如5!=120则最后的0的个数为1
样例输入
6 3 60 100 1024 23456 8735373
样例输出
0 14 24 253 5861 2183837
解析:考虑到0只能由“ 2*5 ”得到,且一个 “5” 很容易就能找到一个 “2” 与之匹配,(因为 “2” 的数量远远大于 “5” 的数量),故只需计算出5的数量即可;在这里,我以720为例,来计算 “5” 的数量。即sum=0 ; 720/5=144 ; sum+=144 ; 144/5=28 ; sum+=28 ; 28/5=5 ; sum+=5 ; 5/5=1 ; sum+=1 ; 解释一下:这里的运算相当于 720中 1个5^4,5-1个5^3,28-5-1个5^2,144-28-5-1个5。
也就是10!= 1*2*3*4*5*6*7*8*9*10 = 3628800,因为只有5和10才含有因子5,因子5的个数为2,因此我们可以推断 11!,12!,13!,14!其最后0的个数均是2,而15!的十进制表示中最后0的个数为3,15!= 1307674368000。而对于25,它含有两个因子5,所以需要多加1个零,每个因子5各产生一个0,而对于625,含有三个因子5,所以需要多加2个0,每个因子5各产生一个0.
详细代码如下:
#include<stdio.h>
int main()
{
int n,m,sum;
scanf("%d",&n);
while(n--)
{
sum=0;
scanf("%d",&m);
while(m)
{
m/=5; sum+=m;
}
printf("%d\n",sum);
}
}