关于大数的计算,如阶乘,得到的结果大大超出了标准数据类型(整型,实型)能表示的范围的运算,因此回到最基本的方法,其中的一个方法是通过数组来记录一个大数的各个位,用列竖式的办法来计算。
将此法做成一个函数,如下:
void Print_Factorial( const int N )
{
int a[4000]={0};
a[1]=1;
int i=2;
if(N>=0)//>=0时的阶乘计算
{
for( ;i<=N;i++)//阶乘 1到n
{
int carry=0;//进位
for(int j=1;j<=3999;j++) //每一位相乘;
{
a[j]=a[j]*i+carry;//乘法原理
carry=a[j]/10;
a[j]%=10;
}
}
for( i=3999;i>0;i--)
if(a[i]) break;//跳过前导0;
for(;i>0;i--)
printf("%d",a[i]);
}
else //n为负数,无效输出
printf("Invalid input");
}