阶乘的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
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
int m;
int c=0;
scanf("%d",&m);
if(m<5)
printf("0\n");
else
{
while(m>=5)
{
c+=m/5;
m/=5;
}
printf("%d\n",c);
}
}
return 0;
}
需要用数学规律总结才能很高效地写出代码,大神的思路:
(1)当n<5时,n!=0
(2)当n>=5时,有 f(N!) = k + f(k!), 其中k = N / 5;
例如:f(100!)=20+f(20!)=20+(4+f(4!))=24
此题属于经典题型,做多了就知道这个结论了!!!