a[0] %= 10 = 0
a[2] = 8*a[2]+a[1]/10 = 3
a[1] %= 10 = 2
a[3] = 8*a[3]+a[2]/10 = 40
a[2] %/10 = 3
a[4] = 8*a[4]+a[3]/10 = 4
a[3] %= 10 = 0
a[4] = 4
// 40320
以a[0]为基准,a[i] = n*a[i] + a[i-1]/10,a[i-1] = a[i-1]%10逐次迭代 。
直接看代码和注释:
#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; else return 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,其余各位全为0 for(int i=2; i<=m; i++) // 阶乘数的循环,如32的阶乘,会连续乘32次 { a[0] *= i; // 个位做为基准位 for(int j=1; j<N; j++) // 整数数组从低位(第2位)开始循环如6!=6*5!=6*120 { a[j] = a[j]*i +a[j-1]/10; // 逐位乘i并加上前一位的进位 a[j-1] %=10; // 前一位只保留个位数 } } int n = N-1; while(a[n]==0) n--; // 从最高位找到第一个非零数 cout<<m<<"!有"<<n+1<<"位,"<<"=\n"; for(;n>=0; n--) cout<<a[n]; cout<<""<<endl;}int main(){ int m; // 需要计算阶乘的数 cout<<"请输入需要计算阶乘的数:"; cin>>m; cout<<facLoop(m)<<endl; cout<<facRecur(m)<<endl; facBig(m); getchar();getchar(); return 0;}/*请输入需要计算阶乘的数:1247900160047900160012!有9位,=479001600 请输入需要计算阶乘的数:22 -522715136 -522715136 22!有22位,= 1124000727777607680000*/

文章插图
请输入需要计算阶乘的数:55500555!有1284位,=661408560927794670909833167124276990212353194561078966630610091508066518398462938708570165931453818774346806677937487622941296716409901122180791183381615199180133649323135568584492485536333258769584469786383591661922104266566863913614070698138881545530808522346156055053115762262612679476256481322688203567171111038254916285768948868390683387427561794062346854491689633073215348773710363218016157511181863057926134577070731221701301152592821760868454925199903505386017787199554004695300736714548162986647886019771379144075642172619449355885906311490931562018599832173006150698910081357711177369686310362939324425024584999311539904643730800189147272918915911770251276375152459026027462464002063813902395684537655374791000270699823191370607631655257869634515506590089013974314269381678319888713892407305906053693865079154285101747723299382026182512365914527438847783156831674629869733219475045947728356608604070725171727115599864469722301348700056888092787342824689113236014679770929700834913475709726807511726110607658874785711823552896770088837953463376048502815279955957922924689302538415337162205637471098765281762231617571867644711936978426265600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
文章插图
-End-
推荐阅读
- 诗经按音乐分为哪三类
- Excel受保护的视图该怎么样解除
- 河南省八年级各科满分是多少分
- 派克服什么内胆更好
- 适合夜晚发的朋友圈心情句子 适合夜晚发朋友圈的短句
- 快乐番薯的烤肠都有什么料
- 分手挽回的句子200字 分手后挽回的句子
- 毛孔粗大平时要注意什么呢
- 羽绒服什么绒最好
