02.26 趣味編程|輸出大數的階乘

對於一個較小的數的階乘,較容易通過循環和遞歸去實現。

對於一個較大的數的階乘,其結果因為位數較多,基本數據類型無法存儲。可以考慮用一個數組來保存結果的每一位。如計算7的階乘,模擬過程如下:

趣味編程|輸出大數的階乘

每乘一次,考慮每一位的變化,相鄰兩位之間只需考慮乘數和進位。

直接看代碼和註釋:

<code>#include <iostream>using namespace std;#define N 10000long facLoop(int n)  // 循環實現小數的階乘{long sum=1;for(int i=2; i<=n; i++)sum*=i;return sum;}long facRecur(int n) // 遞歸實現小數的階乘{if(n==0)return 1;elsereturn n*facRecur(n-1);}void facBig(int m){/* 大數階乘,使用數組來存儲每一位:1 初始值a[0]=1;2 i=1,2,…,m循環;3 j從1開始循環。逐位乘i並加上前一位的進位,並將前一位只保留個位數; */int a[N]={1};// a[0]=1,其餘各位全為0for(int i=2; i<=m; i++)// 階乘數的循環{a[0] *= i;// 個位做為基準位for(int j=1; j=0; n--)cout</<iostream>/<code>
趣味編程|輸出大數的階乘

<code>請輸入需要計算階乘的數:55500555!有1284位,=661408560927794670909833167124276990212353194561078966630610091508066518398462938708570165931453818774346806677937487622941296716409901122180791183381615199180133649323135568584492485536333258769584469786383591661922104266566863913614070698138881545530808522346156055053115762262612679476256481322688203567171111038254916285768948868390683387427561794062346854491689633073215348773710363218016157511181863057926134577070731221701301152592821760868454925199903505386017787199554004695300736714548162986647886019771379144075642172619449355885906311490931562018599832173006150698910081357711177369686310362939324425024584999311539904643730800189147272918915911770251276375152459026027462464002063813902395684537655374791000270699823191370607631655257869634515506590089013974314269381678319888713892407305906053693865079154285101747723299382026182512365914527438847783156831674629869733219475045947728356608604070725171727115599864469722301348700056888092787342824689113236014679770929700834913475709726807511726110607658874785711823552896770088837953463376048502815279955957922924689302538415337162205637471098765281762231617571867644711936978426265600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000/<code>
趣味編程|輸出大數的階乘

-End-


分享到:


相關文章: