坦然玲子  

 

阶乘的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 #include<iostream>
 2 using namespace std;
 3 #define max 10000000
 4 int a[max];
 5 int main()
 6 {
 7        int i,N,k;
 8        a[0]=0;
 9        for(i=1;i<max;i++)
10       {
11              k=i/5;
12             a[i]=k+a[k];//a[i]表示i!中含有多少个因子5
13       }
14       cin>>N;
15       while(N--)
16       {
17             int n;
18             cin>>n;
19             cout<<a[n]<<endl;//多少个因子5就有多少个0
20       }
21       return 0;
22 }

 

        
   
法二 
 1 #include<iostream>
 2 using namespace std;
 3 int GetP(int x, int p)
 4 {
 5    int res = 0;
 6     while (x)
 7     {
 8         res = res + x / p;
 9          x = x / p;
10     }
11     return res;
12 }
13 int main()
14 {
15  int nn,m;
16  cin>>nn;
17  while(nn--)
18  {
19   cin>>m;
20   cout<<GetP(m,5)<<endl;
21  }
22 }

 

                
posted on 2012-04-04 16:01  坦然玲子  阅读(1439)  评论(0编辑  收藏  举报