阶乘的0
时间限制:3000 ms | 内存限制:65535 KB
难度:3
-
描述
-
计算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
-
第一行输入一个整数N表示测试数据的组数(1<=N<=100)
思路:要求M的阶乘的十进制表示中最后0的个数,也就是要求从1~M,因子数5有多少个,因为只有含有因子5,才能配成结果后面为0的数,比如 2 * 5 = 10 ,2 * 10 = 20;
也就是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 t;
int m;
scanf("%d",&t);
while(t--)
{
int sum = 0;
scanf("%d",&m);
while (m != 0)
{
m = m / 5;
sum += m;
}
printf("%d\n",sum);
}
return 0;
}