正文

大数阶乘2008-03-23 13:15:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/zhaoyg/33520.html

分享到:

//大数阶乘// 07.4.27 #include<stdio.h>#include<time.h> int main(){    double duration;     int a[100000]={0};    int N,i,c=1,j;     a[1]=1;    clock_t start, finish;     printf("大数阶乘,请输入一个数\n");    scanf("%d",&N);    start = clock();    for (j=1;j<=N;j++)    {        for (i=1;i<=c;i++)        {            a[i]=a[i]*j;        }         for (i=1;i<=c;i++)          {            /*不能写成(i=c;i>0;i--)因为这样将漏掉低位的进位,              例如a[3]=7*7,a[2]=3*3,a[1]=2*5,当i减到1时a[1]=10需要向a[2]进一位,而当仅为后              a[2]=10又该向a[3]进位,但此时循环已是最后一次循环,故不能实现向a[3]进位              a[4]=4 a[3]=9 a[2]=10 a[1]=0            */            if (a[i]>=10)            {                 a[i+1]=a[i+1]+a[i]/10;                a[i]=a[i]%10;                if(a[c+1]!=0)                 c++;            }        }     //若将if(a[c+1]!=0)语句放于此处(for (i=1;i<=c;i++))之外则造成a[c+1]不是一位数,     //因为a[c+1]这个元素将不止一位数,当进行例如1000!的计算时     //会由于a[c+1]数值的溢出而造成计算不准确。    }    printf("result:\n");     for(i=c;i>0;i--) {  printf("%d",a[i]);    }    finish = clock();    printf("\n一共%d位\n",c);     duration = (double)(finish - start)/CLOCKS_PER_SEC ;    printf( "%f ms\n", duration );     getchar();    getchar();    return 0;}  

阅读(2305) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册