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

大数阶乘

程序员文章站 2022-05-12 13:40:19
...

阶乘问题我们都知道,对于小数的阶乘我们就直接迭代进行,进而求出结果,但由于阶乘增长速度很快,很快就会超过内置类型的值,这时候就要使用大数阶乘,用字符串来操作。

例题:

大数阶乘
分析:这里由于m很大,你直接用迭代求是会爆内置类型的值,故因此用大数阶乘
实际操作跟大数运算基本一样,用一个容器来存值,容器的低位就用来存个位十位这样倒序着来存储,然后每次迭代,用n+1乘容器里的每一个元素,然后有进位的就进位,一直到末尾

上图

大数阶乘

#include <stdio.h>
int main()
{
	int a[20001];//储存每一位所得到的数 
	int temp,digit,n,i,j=0;//temp每次的得数   digit每次得数的位数  
	scanf("%d",&n);
	a[0]=1;//从1开始乘 
	digit=1;//位数从第一位开始 
	for(i=2;i<=n;i++)
	{
		int num=0;  //设置进位
		for(j=0;j<digit;j++) 
		{
			temp=a[j]*i+num;//将一个数的每一位数都分别乘以i, 
			a[j]=temp%10;//将一个数的每一位数利用数组进行储存
			num=temp/10;//也可以以100,1000等分位 
		}
		while(num)//判断退出循环后,num的值是否为0 
		{
			a[digit]=num%10;//继续储存 
			num=num/10;
			digit++;
		}
	}
	for(i=digit-1;i>=0;i--)//倒序输出每一位 
		printf("%d",a[i]);
	printf("\n");
	return 0;
}

相关标签: 暂时放置