c语言中阶乘的精确值

  对于大数的操作,可能超出int,甚至long的表示范围,对此,可以使用数组来存储大数,下列代码为求1000以内数的阶乘的代码,代码如下:

#include <stdio.h>
#include<string.h>
const int max=3000;
int main()
{
    int f[3000];//存放最终的结果
    int i,j,n,c,tem;
    memset(f,0,sizeof(f));
    scanf("%d",&n);
    f[0]=1;
    for(i=2;i<=n;i++)
    {
        c=0;
        for(j=0;j<max;j++)
        {
            tem=i*f[j]+c;
            c=tem/10;
            f[j]=tem%10;

        }
    }
    for(j=max-1;j>=0;j--)
        if(f[j]!=0)
            break;
        for(i=j;i>=0;i--)
            printf("%d",f[i]);    
        printf("\n");
    return 0;
}

对于这段代码的理解,可以利用最简单的例子来阐明。

例如,利用int 数组来存储结果,数组长度为4,数组名为a.

在45*33的运算中,利用小学的笔算方法如下:

                                

  在计算机语言中,我们是这样计算的,首先a[0]=5,a[1]=4,a[3]=0,a[4]=0;

33*a[0]=135,此刻将a[0]赋值为5,进位为c=13

第二步

33*a[1]+c=148,此刻将a[1]赋值为8,进位为c=14

第三步

33*a[2]+c=14,此刻将a[2]赋值为4,进位为c=1

第四步

33*a[3]+c=1,此刻将a[3]赋值为1,运算成功!

                            

posted on 2015-07-25 17:21  1163699877  阅读(661)  评论(0编辑  收藏  举报