请问各位大神我这个高精度求阶乘和的程序哪里错了?

2025-03-29 02:11:35
推荐回答(1个)
回答1:

#include

int a[16350];

int jc(int n){

    int i,j;

    for(i=0;i<=n;i++)            //这个做法效率太低了

        a[i]*=n;

    for(i=0;i<=n;i++)            //这个循环对大数的阶乘就错了,50!是一个69位数

    {

         if(a[i]>=10){

            if(a[i+1]<0)

         a[i+1]=0;

         a[i+1]+=a[i]/10;

         a[i]%=10;

       }

    }

      return i+1;

}

int main(){

    int i,j,k,m=1,n;

    memset(a,-1,16350*sizeof(int));

    a[0]=1;

    scanf("%d",&n);

    for(i=2;i<=n;i++)

      m=jc(i);

    for(i=m;i>=0;i--){

        if(a[i]>=0) printf("%d",a[i]);

    }

    printf("\n");

    return 0; 

}