求一个阶乘尾数0的个数(C语言实现)

解题思路:直接求出这个数然后求其末尾0的个数肯定是不可取的,即使是long类型,也很快会有溢出              现象。可以利用2*5=10,对任意数的阶乘,5的因子个数肯定比2的因子个数要少,所以,可以认为,n的阶乘尾数中有多少个0,取决于1-n这些数中5的因子有多少个。

以下是C语言的实现源代码:

#include<stdio.h>

int getDivisorCount(int dividend,int divisor); 
void main(void)
{
     int sum = 0,i;
     for(i = 1;i <= 100;i++)//求10的阶乘尾数0的个数 
     {
           int count = getDivisorCount(i,5);
           sum += count;
     }
     
     printf("100!zero=%d",sum);
     system("PAUSE");
}


/*
*dividend:被除数,divisor除数,有上述原理分析这里divisor的值为5 
*这个方法求出1-n中每个数的5的因子个数 
*/ 

int getDivisorCount(int dividend,int divisor)
{
   if(dividend == 0)
   {
       return 0;
   } 
   
   int count = 0;
   
   if(dividend%divisor == 0)
   {
       count = 1;
       count = count + getDivisorCount(dividend/divisor,divisor); 
   }
   
   return count;
}
  
          
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章