LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 889|回复: 0

求40位数的阶乘 (数组的高级应用的例子)

[复制链接]
发表于 2002-11-9 20:09:48 | 显示全部楼层 |阅读模式
在求一个数的阶乘的时候,就是定义一个long型或 double型 也只能算到多少位
数,这个位数与机器的字长有关,16位、32 位、64位,假设要一个数的阶乘运算结果超过了64位数就没有办法了,这个问题可以用数组来解决。

void main()
{
    int data[40]; //存储位数的数组
    int digit; //数据位数变量
    int i,j,k,r; //循环计数变量
    int N; //输入的值

    for(i=1;i<40+1;i++) //初始化数组
        data=0;
    data[0]=1;
    data[1]=1;
    digit=1;
    printf("Enter a number :");
    scanf("%d",&N); //读取n值

    for(i=1; i<N+1;i++)
    {
    for(j=1; j<digit+1;j++)
    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");
    }
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表