阶乘的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
/*
本题主要是找到1到m中每个数含有5的约数的个数总和;
1 /* 2 本题主要是找到 1到 m中每个数含有 5的 约数的个数总和; 3 //超时代码一: 4 #include<stdio.h> 5 #include<string.h> 6 int a[10000000]; 7 int main() 8 { 9 int n,m,i,j,t,num,bit; 10 scanf("%d",&n); 11 while(n--) 12 { 13 num=0; 14 memset(a,0,sizeof(a)); 15 scanf("%d",&m); 16 a[0]=1; 17 bit=0; 18 for(i=1;i<=m;++i) 19 { 20 t=0; 21 for(j=0;j<=bit;++j) 22 { 23 a[j]=a[j]*i+t; 24 t=a[j]/10; 25 a[j]=a[j]%10; 26 } 27 if(t) 28 bit++; 29 } 30 for(i=0;a[i]==0;++i) 31 num++; 32 printf("%d\n",num); 33 } 34 return 0; 35 } 36 37 超时代吗二: 38 #include<stdio.h> 39 int main() 40 { 41 int n,m,i,t,num; 42 scanf("%d",&n); 43 while(n--) 44 { 45 num=0; 46 scanf("%d",&m); 47 for(i=5;i<=m;++i) 48 { 49 t=i; 50 while(t%5==0) 51 { 52 ++num; 53 t/=5; 54 } 55 } 56 printf("%d\n",num); 57 } 58 return 0; 59 } 60 */ 61 //AC代码-----求 1 --- n 之间所有数含有多少个因子 5 62 #include<stdio.h> 63 int main() 64 { 65 int n,m,num; 66 scanf("%d",&n); 67 while(n--) 68 { 69 num=0; 70 scanf("%d",&m); 71 while(m!=0) 72 { 73 num=num+m/5; 74 m=m/5; 75 } 76 printf("%d\n",num); 77 } 78 return 0; 79 }