分类: C/C++
2014-07-18 21:26:01
当处理计算机内置数据类型无法处理的大数时,注意采用数组来进行运算。其中关键的地方在于处理运算过程中的进位运算。
以下为一个求大数阶乘的函数,存储于a[1000]中,每个元素存储4位数,可以借鉴用于处理一般的大数的运算。
int factorial(int n)
{
long a[1000]; //存储大数
int i,j,m=0, c;
int width=0;
if(n==0) printf("%d",1);
a[0]=1; //
for(i=1;i<=n;i++) //阶乘
{
c=0;
for(j=0;j<=m;j++) //将数组每一个元素里面存储的值进行阶乘
{
a[j]=a[j]*i+c;
c=a[j]/10000; //获取超过10000的近位
a[j]=a[j]%10000; //保留未进位的数
}
if(c>0) //有进位,向前进位。
{
m++;
a[m]=c;
}
}
printf("\n%ld",a[m]);
for(i=m-1;i>=0;i--)
{
printf("%d",a[i]);
}
printf("\n");
width=4*m+log10((double)a[m])+1;
return width;
}