用数组的方法解决大数、巨数的阶乘结果越界的问题。 
#include <stdio.h> 
#define N 10
void main()
{
 
 LONG n,i,j;                                            //阶乘大小
 printf("请输入n的大小:");
 scanf("%d",&n);                                   //从键盘接收阶乘大小
 LONG a[200];                                       //确保保存最终运算结果的数组足够大
 LONGcarry;                                        //进位
 LONG digit = 1;                                    //位数
 a[0] = 1;                                         //将结果先初始化为1
 LONG  temp;                                         //阶乘的任一元素与临时结果的某位的乘积结果
         
 for( i = 2; i <= n; i++)                       //开始阶乘,阶乘元素从2开始依次“登场”
 {
         //按最基本的乘法运算思想来考虑,将临时结果的每位与阶乘元素相乘  
  for( j = 1, carry = 0; j <= digit; j++)    
  {
   temp = a[j-1] * i + carry;                //相应阶乘中的一项与当前所得临时结果的某位相乘(加上进位)
        a[j-1] = temp % N;                       //更新临时结果的位上信息
   carry = temp / N;                        //看是否有进位
  }
  while(carry)                                  //如果有进位
  {
   a[++digit-1] = carry % N;                //新加一位,添加信息。位数增1
   carry /= N;                              //看还能不能进位
  }
 } 
 printf("结果是:\n%d ! = ",n);                     //显示结果
 for(int i = digit-1; i >=0; i--)
 {
  printf("%d",a[i]);
 }
}
这是网上找的一个程序.但我认为这个程序太浪费空间了,一个数组元素放一位十进制!我想的是一个数组元素尽可能的放多位十进制数.但我想了很久没有一个好的解决办法,主要在于阶乘末尾有很多0,上面的N我就不能定义得太大,超过10就会出错.我不知道怎么处理这个问题,请大家指教一下.
[讨论]一个巨数阶乘的改进问题
											
 
											





