回 帖 发 新 帖 刷新版面

主题:一个想了3天3夜没想出来的问题

[em10]这个问题就是怎么编程算出1到100的阶乘?那为老师能告诉我该怎么实现么?[em18]

回复列表 (共27个回复)

11 楼

100!=9.3326215443944152681699238856267e+157
定义长整型类,重载乘法

12 楼

应该用链表就储存这个数字
用其他的早就益出了、

13 楼

可以看看这个网站( blog.csdn.net/liangbch), 内有大数阶乘的最详尽的算法讨论和代码。

14 楼


哈哈  晕了有人比我还菜~~  这个我还是会的 嘿嘿

15 楼

动态编程

16 楼

93326215443944152681699238856266700490715968264381621468592963895217599993229915
608941463976156518286253697920827223758251185210916864000000000000000000000000

17 楼


但是 如果用int型的数据,如果100的阶乘如果过于的话,回出错啊
 
[em18][em18][em18]

18 楼

int Factor(int n)
{
   if(<=1)
     return 1;
   else
     return n*Factor(n-1);
}
这是递归的阶乘函数,不过有溢出问题,lz自己试着改改吧!!

19 楼

//求n!,用数组arr 存数值,并返回总的位数

int Factorial(int *arr, int n)
{
int   i, j, temp;
int   carry;//进位
int   digit = 1;//位数,必须初始值1
arr[0] = 1;//初始化

for(i=2; i <= n; i++)
{
   for(j=carry=0; j < digit; j++)
   {
    temp = arr[j]*i+carry;
    arr[j] = temp%10;
    carry = temp/10;
   }
   while(carry)
   {
    arr[digit++] = carry%10;
    carry /= 10;
   }
}
return digit;
}

20 楼


//求n!,用数组arr 存数值,并返回总的位数

int Factorial(int *arr, int n)
{
int   i, j, temp;
int   carry;//进位
int   digit = 1;//位数,必须初始值1
arr[0] = 1;//初始化

for(i=2; i <= n; i++)
{
   for(j=carry=0; j < digit; j++)
   {
    temp = arr[j]*i+carry;
    arr[j] = temp%10;
    carry = temp/10;
   }
   while(carry)
   {
    arr[digit++] = carry%10;
    carry /= 10;
   }
}
return digit;
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册