Description
对于数学阶乘N!当N得数很大时我们会发现N!是个很大的数,我们很难去计算,但是我们很容易计算出N!的末尾的0的个数,所以现在设函数Z(N)为N!的末尾的0的个数。
Input
输入第一行包括一个整数T,表示接下来的测试实例的个数,接下来的T行,每行包括一个 整数N,1< = N <= 1000000000.
Output
对于每一个数N,输出一个对应的Z(N);
Sample Input
3
3
60
8735373
Sample Output
0
14
2183837
对于数学阶乘N! 当N得数很大时我们会发现N!是个很大的数,我们很难去计算,但是我们很容易计算出N!的末尾的0的个数,所以现在设函数Z(N)为N!的末尾的0的个数。
#include<stdio.h>
int main()
{
int t,s,n,m;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
s=0;
m=n;
while(m>4)
{
m=m/5;
s=s+m;
}
printf("%d\n",s);
}
return 0;
}
我曾经研究过世界奥林匹克的题,最终发现一个无与伦比的简单解法: 用原数除以5,如100/5=20; 如果得数大于5则将得数再除以5,即20/5=4; 依次类推,直到得数小于4时停止,将以上得数相加 得(20+4)=24,即为解
再举一个例子: 1000/5=200; 200/5=40; 40/5=8; 8/5=1...3;
则1000!末尾有(200+40+8+1)=249.
注意:如果除的过程中发现有余数,则去掉余数,用得数接着算即可,就如8/5=1...3,这里3是没有任何作用的