龙空技术网

趣味编程|输出大数的阶乘

小智雅汇 283

前言:

眼前姐妹们对“大数阶乘算法ppt”大体比较关怀,同学们都需要分析一些“大数阶乘算法ppt”的相关文章。那么小编在网上汇集了一些关于“大数阶乘算法ppt””的相关资讯,希望姐妹们能喜欢,咱们一起来了解一下吧!

对于一个较小的数的阶乘,较容易通过循环和递归去实现。

对于一个较大的数的阶乘,其结果因为位数较多,基本数据类型无法存储。可以考虑用一个数组来保存结果的每一位。如计算7的阶乘,模拟过程如下:

每乘一次,考虑每一位的变化,相邻两位之间只需考虑乘数和进位。

直接看代码和注释:

#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++)				// 阶乘数的循环	{		a[0] *= i;						// 个位做为基准位		for(int j=1; j<N; j++)		{			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*/					*2				2						*3				6						*4			2	4						*5		1	2	0						*6		7	2	0						*7	5	0	4	0	/*请输入需要计算阶乘的数:22-522715136-52271513622!有22位,=1124000727777607680000*/
请输入需要计算阶乘的数:55500555!有1284位,=661408560927794670909833167124276990212353194561078966630610091508066518398462938708570165931453818774346806677937487622941296716409901122180791183381615199180133649323135568584492485536333258769584469786383591661922104266566863913614070698138881545530808522346156055053115762262612679476256481322688203567171111038254916285768948868390683387427561794062346854491689633073215348773710363218016157511181863057926134577070731221701301152592821760868454925199903505386017787199554004695300736714548162986647886019771379144075642172619449355885906311490931562018599832173006150698910081357711177369686310362939324425024584999311539904643730800189147272918915911770251276375152459026027462464002063813902395684537655374791000270699823191370607631655257869634515506590089013974314269381678319888713892407305906053693865079154285101747723299382026182512365914527438847783156831674629869733219475045947728356608604070725171727115599864469722301348700056888092787342824689113236014679770929700834913475709726807511726110607658874785711823552896770088837953463376048502815279955957922924689302538415337162205637471098765281762231617571867644711936978426265600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

-End-

标签: #大数阶乘算法ppt