大数阶乘
程序员文章站
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;
}
上一篇: (C语言)实验2 用C语言编写程序
下一篇: 输出余弦函数