求一個階乘尾數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;
}
  
          
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章