C语言怎么求大数的阶乘?

#include int main(){ int a[5000]={0,1},co=1,n; scanf("%d",&n); for(int i=2;i<=n;i++) { int jinwei=0; for(int j=1;j<=co;j++) { a[j]=a[j]*i+jinwei; if(a[j]/10000) { jinwei=a[j]/10000; a[j]%=10000; } else jinwei=0; } if(jinwei) a[++co]=jinwei; } printf("%d",a[co]); for(--co;co;--co) printf("%04d",a[co]); printf("\n"); return 0;}

C语言利用数组计算超大整数的阶乘代码

#include <stdio.h>    

int main()    

{    

    int n;    

    int a[9000]; //确保保存最终运算结果的数组足够大    

     int digit = 1; //位数    

     int temp;   //阶乘的任一元素与临时结果的某位的乘积结果    

     int i, j, carry; //carry:进位    

     

     printf("please in put n:\n");    

    scanf("%d",&n);    

    a[0] = 1;   //将结果先初始化为1    

     

    for ( i=2; i<=n; i++ )  //开始阶乘,阶乘元素从2开始依次"登场"    

    {  //按最基本的乘法运算思想来考虑,将临时结果的每位与阶乘元素相乘    

         for( j=1, carry=0;  j<=digit; j++ )    

        {    

            temp = a[j-1] * i + carry; //相应阶乘中的一项与当前所得临时结果的某位相乘(加上进位)    

              a[j-1] = temp % 10; //更新临时结果的位上信息    

              carry = temp / 10; //看是否有进位    

         }    

        while(carry)    

        {    //如果有进位    

              a[++digit-1] = carry % 10; //新加一位,添加信息。位数增1    

            carry = carry / 10; //看还能不能进位    

         }    

    }    

    printf("n ! = ");    //显示结果    

    for(j = digit; j >=1;j--)    

    {    

        printf("%d",a[j-1]);    

    }    

    printf("\n");    

    return 0;    

}    




#include <stdio.h>    
int main()    
{    
    int n;    
    int a[9000]; //确保保存最终运算结果的数组足够大    
     int digit = 1; //位数    
     int temp;   //阶乘的任一元素与临时结果的某位的乘积结果    
     int i, j, carry; //carry:进位    
     
     printf("please in put n:\n");    
    scanf("%d",&n);    
    a[0] = 1;   //将结果先初始化为1    
     
    for ( i=2; i<=n; i++ )  //开始阶乘,阶乘元素从2开始依次"登场"    
    {  //按最基本的乘法运算思想来考虑,将临时结果的每位与阶乘元素相乘    
         for( j=1, carry=0;  j<=digit; j++ )    
        {    
            temp = a[j-1] * i + carry; //相应阶乘中的一项与当前所得临时结果的某位相乘(加上进位)    
              a[j-1] = temp % 10; //更新临时结果的位上信息    
              carry = temp / 10; //看是否有进位    
         }    
        while(carry)    
        {    //如果有进位    
              a[++digit-1] = carry % 10; //新加一位,添加信息。位数增1    
            carry = carry / 10; //看还能不能进位    
         }    
    }    
    printf("n ! = ");    //显示结果    
    for(j = digit; j >=1;j--)    
    {    
        printf("%d",a[j-1]);    
    }    
    printf("\n");    
    return 0;    
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-26
#include<stdio.h>
int f[4000];
void main()
{
int i,j,n;
scanf("%d",&n);
for(i=0;i<4000;i++)
f[i]=0;
f[0]=1;
for(i=2;i<=n;i++)
{
int c=0;//进位
for(j=0;j<4000;j++)
{
int s=f[j]*i+c;
f[j]=s%10;
c=s/10;
}
}
for(j=3999;j>=0;j--) if(f[j]) break;
for(i=j;i>=0;i--) printf("%d",f[i]);
printf("\n");
}
主要运用了,乘法的基本原理,用数组的每一个元素来存储个位十位百位千位……本回答被网友采纳
相似回答