C语言——计算大数阶乘

学过C语言的同学都知道,C语言能表示最大的数就是long double了,但是就算是这样一个数也最多能计算170及以下的阶乘,而对于170以上的大数阶乘却无法用来表示。
因此下面介绍一种来计算大数阶乘的方法。

#include <stdio.h>

void Factorial(int n);//声明函数Factorial 

int main()//主函数,输入n的值 
{
	int n;
	scanf("%d",&n);
	Factorial(n);//把n的值传给函数Factorial 
	return 0;
}

void Factorial(int n)//定义函数Factorial 
{
	int i,j;//定义循环变量 
	int temp;//定义中间结果变量 
	int carry;//定义进位数变量 
	int len=1;//定义结果长度变量 
	int a[10000]={0};//定义结果数组 
	a[0]=1;//初始结果为1 
	for (i=2;i<=n;i++)//循环n次,求n的阶乘 
	{
		carry=0;//使每次进位数为零 
		for (j=0;j<len;j++)//保存每一位数字并判断结果是否需要增长 
		{
			temp=a[j]*i+carry;//计算中间结果 
			a[j]=temp%10;//保存每一位数字,从后往前 
			carry=temp/10;//计算进位数  
			if (j>=len-1 && carry>0)//判断结果是否需要增长 
			{
				len++;
			}
		}
	}
	
	for (i=len-1;i>=0;i--)//输出最终结果 
	{
		printf("%d",a[i]);
	}
}

下面是1000阶乘的运行结果:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值