之前有写过大数加减乘除法的大数运算,这次将介绍关于大数阶乘的运算,其简易程度不同,运用的范围也不同。使用时酌情处理。
本篇博客将介绍几种大数的阶乘,相应的讲解将在代码中直接给出,不在详细介绍、
首先第一方法
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
int i,j,m,n;
int a[10000];
while(~scanf("%d",&n))
{
if(n<0)
{
continue;
}
memset(a,0,sizeof(a));//将数组a中数据都赋值为0
m=0;
a[0]=1;
for(i=1;i<=n;i++)
{
for(j=0;j<=m;j++)
{
a[j]=a[j]*i;
/*
定义数组a中每个元素最高数为9999,当某一位元素大于等于10000时需要向最高位一位,即
进位操作即将要进位的元素对10000取余保留除最高为以外的数,同时高位元素加上进位元素中数的的最高位;
定义的数组中的数值由左向右依次从最低阶到高阶
*/
if(j>0&&a[j-1]>=10000)
{
a[j]=a[j]+a[j-1]/10000;
a[j-1]=a[j-1]%10000;
}
if(a[m]>=10000)
{//最高元素向下一级元素进位,数组中元素组数增加一组
m++;
}
}
}
//输出结果
printf("%d",a[m]);//输出最高位,其数值位数小于四位
for(i=m-1;i>=0;i--)
{
printf("%04d",a[i]);//输出的数值位数必须为四位,如果少了补0
}
printf("\n");
}
return 0;
}
方法二:后续补充