生活随笔
收集整理的這篇文章主要介紹了
计算n!中结尾零的个数
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
計(jì)算n!中結(jié)尾零的個(gè)數(shù)(C++實(shí)現(xiàn))?。
[cpp]?view plaincopy
#include????? ???? /*計(jì)算n!結(jié)尾零的個(gè)數(shù),返回零的個(gè)數(shù)。*/???? int?CalZeroNum(int?n)???? {???? ????int?result=1;???? ????int?num=0;???? ???? ????/*計(jì)算n的階乘,結(jié)果保存在result中。*/???? ????int?i;???? ????for(i=n;i>=1;i--)???? ???????????result*=i;???? ???? ????/*計(jì)算result結(jié)尾零的個(gè)數(shù)*/???? ????while(1)???? ????{???? ????????if(result%10==0)???? ????????{???? ????????????result/=10;???? ????????????num++;???? ????????}???? ????????else????? ????????????break;???? ????}???? ????return?num;//返回零的個(gè)數(shù)。???? }???? ???? void?main()???? {???? ????printf("10!結(jié)尾零的個(gè)數(shù)為:%d/n",CalZeroNum(10));???? }????
?
?
算法思想:在1-10兩個(gè)數(shù)相乘要產(chǎn)生0,只有?10×1=2×5,2×5。
??200!=200×199×198……×2×1=2×5×2×5×2×199….?×2×1;可以分解為質(zhì)數(shù)相乘的形式,很明顯有2的個(gè)數(shù)比5的多,所以只要求出200的階乘可分解出多少個(gè)5相乘,就可得到200的階乘結(jié)尾的連續(xù)的零的個(gè)數(shù).
即:num=[200/5]+[200/5/5]+[200/5/5/5].
注: [x]表示對(duì)x取整.
所以可以通過這個(gè)思路很容易的得到任意階乘結(jié)尾連續(xù)的零,其示例C語言代碼如下:
[cpp]?view plaincopy
#include????? ???? /*計(jì)算n!結(jié)尾零的個(gè)數(shù),返回結(jié)尾零的個(gè)數(shù)。*/???? int?CalZeroNum(int?n)???? {???? ????int?num=0;//n!結(jié)尾零的個(gè)數(shù)???? ????int?b=1;//5的次方???? ????while(1)???? ????{???? ????????b*=5;???? ????????num+=n/b;???? ????????if(b>n)???? ????????????break;???? ????}???? ????return?num;//返回結(jié)尾零的個(gè)數(shù)???? }???? ???? void?main()???? {???? ????printf("20!結(jié)尾零的個(gè)數(shù)為:%d/n",CalZeroNum(20));???? } ? ?
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀
總結(jié)
以上是生活随笔為你收集整理的计算n!中结尾零的个数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。