大数阶乘

//http://blog.sina.com.cn/s/blog_80a11dd70100vaxv.html
#include <stdio.h>
void main()
{
    int data[50]; //存储位数的数组
    int digit; //数据位数变量 120为三位
    int i,j,k,r; //循环计数变量
    int N; //输入的值

    for(i=1; i<40+1; i++) //初始化数组
        data[i]=0;
    data[0]=1;//一二位为1,其他位为0
    data[1]=1;
    digit=1;
    printf("Input n:");
    scanf("%d",&N); //读取n值

    for(i=1; i<N+1; i++) {
        for(j=1; j<digit+1; j++)//24*5=20*5+4*5
            data[j]*=i; //对数组中的内容运算
        for(j=1; j<digit+1; j++) {
            if(data[j] >10) {//进位
                for(r=1; r<digit+1; r++) {//遍历整个数组
                    if(data[digit] >10)
                        digit++; //当数组中的值大于10则位数加1
                    data[r+1]+=data[r] /10;//进位操作
                    data[r]=data[r]%10;
                }
            }
        }
        printf("%d!=", i ) ;
        for(k=digit; k>0; k--) //输出数组中的内容
            printf("%d",data[k]);
        printf("\n");
    }
}

  

posted @ 2014-03-30 08:58  xzenith  阅读(182)  评论(0编辑  收藏  举报