欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

阶乘计算

程序员文章站 2022-03-04 19:41:34
...

之前看到老师的一篇博客写到了大数阶乘的计算,即40的阶乘,值肯定超出了int所表示的整数的范围。所以用数组来保存计算即可,具体细节可以参照,https://blog.csdn.net/bufanq/article/details/51455207
需要注意点是:
计算每一位数组元素时,需要先乘,在加上进位,刚开始时将进位设为0;
还要老师说用size记录数组的长度,这个可以不必要。

#include "stdio.h"
#define m 400
int main()
{
	int i,j;
	int result;
	int c = 0;
	int a[m];
	int n;
	int k,v;
	for(i=0;i<m;i++)
	{
		a[i] = 0;
	}
	a[0] = 1;
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		for(j=0;j<m;j++)
		{
			result = a[j]*i+c;
			c = result/10;
			a[j] = result%10;
		}
		for(k=m-1;k>=0;k--)
		{
			if(a[k])
				break;//为什么用break跳出循环,从而记录位置打印,而不直接打印。 
		}
		for(v=k;v>=0;v--)
		{
			printf("%d",a[v]);
		}
		printf("\n");
	}
}

如下图所示
阶乘计算
这里附上,为什么用break跳出循环从而再打印数组的每一位。
而不是直接用

for(k=m-1;k>=0;k--)
	{
		if(a[k]!=0)
			printf("%d",a[i]);
	}

这样子的话数组中所有不为0的数将全部忽略,而在计算过程中会产生有用的0,如120;
附上截图即可理解
阶乘计算
可以看到5的阶乘为120,由于用了错误的代码导致变成了12。

相关标签: c语言