n階乘尾部有多少個零?

思路        

錯誤思路

計算出 n! 結果後判斷,是不可以行的,結果太大會溢出。

正確思路

有這樣的現象:從0開始,每加5,其階乘尾部便會增加一個0。比如:5!有一個0,10!有兩個0,15!有三個0...

現象的原因:5和任意偶數相乘就會產生0,而偶數的個數遠比5的個數多,所以每增加5 結尾就會增加一個零。

按照這個現象:n! 尾部0的個數 == n/5。

可是這樣還不完善,因爲沒有考慮到:每次加 5 到了 5 的次方時,會出現增加多個 0 的現象。也就是5*5*...和多個偶數相乘就會產生多個零。

所以:n! 尾部0的個數 == n/5 + n/5*5 + n/5*5*5...

代碼

int CountZero(int N)
{
    int ret =0;
    while(N)
    {
        ret+=N/5; 
        N/=5;
    } 
    return ret;
}

分析:上述第一次循環是N/5,表示含有 5 的個數。
第二次循環是N/5/5,表示含有 5*5 的個數。
第二次循環是N/5/5/5,表示含有 5*5*5 的個數。
...

        算法學習並不是完全爲了面試,對程序員的編碼能力提升也是很大的。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章