解决方案 »

  1.   

    #include "stdio.h"//
    #include "math.h"//
    #include "stdlib.h"//
    char *FactorialLN(int n){
        int i,j,k,len;
        char *pa,*pb,*ptmp;
        double dec=0;
        for(n++,i=2;i<n;dec+=log10(i++));
        len=(int)dec+2;
        pa=(char *)malloc(len);
        pb=(char *)malloc(len);
        if(!pb || !pa){
            printf("Application memory failure...");
            exit(0);
        }
        for(i=0;i<len;*(pa+i)=*(pb+i++)=0);
        for(i-=2,j=--n;j;*(pb+i--)=j%10,j/=10);
        len--;
        i++;
        while(--n){
            for(k=0;k<n;k++){
                for(j=i;j<len;*(pa+j)+=*(pb+j++));
                for(j=len-1;j>i;j--)
                    if(*(pa+j)>9){
                        *(pa+j)-=10;
                        (*(pa+j-1))++;
                    }
                if(*(pa+i)>9){
                    *(pa+i--)-=10;
                    (*(pa+i))++;
                }
            }
            ptmp=pa;
            pa=pb;
            pb=ptmp;
            for(k=0;k<len;*(pa+k++)=0);
        }
        free(pa);
        for(i=0;i<len;*(pb+i++)+='0');
        return pb;
    }
    void main(void){
        int n;
        char *p;
        printf("Please enter an integer.\nn=");
        scanf("%d",&n);
        printf("%d! = %s.",n,p=FactorialLN(n));
        free(p);
        printf("\n");
    }
      

  2.   

    百度一下,很多,http://alinw.blog.hexun.com/43725683_d.html
      

  3.   

    public static uint[] CalculateLargeNumber(int n)
            {
                if (n < 0) { throw new ArgumentOutOfRangeException("n必须为非负数。"); }            if (n == 0 || n == 1) { return new uint[] { 1 }; }
                // 数组的最大长度
                const int MaxLength = 100000;
                uint[] array = new uint[MaxLength];
                // 1! = 1
                array[0] = 1;
                int i = 0;
                int j = 0;
                // valid为当前阶乘值的位数(如5! = 120,此时valid = 3)
                int valid = 1;            for (i = 2; i <= n; i++)
                {
                    long carry = 0;
                    for (j = 0; j < valid; j++)
                    {
                        long multipleResult = array[j] * i + carry;
                        // 计算当前位的数值
                        array[j] = (uint)(multipleResult % 10);
                        // 计算进到高位的数值
                        carry = multipleResult / 10;
                    }
                    // 为更高位赋值
                    while (carry != 0)
                    {
                        array[valid++] = (uint)(carry % 10);
                        carry /= 10;
                    }
                }
                // 截取有效元素
                uint[] result = new uint[valid];
                Array.Copy(array, result, valid);
                return result;
            } 
    static void Main(string[] args)
            {
                uint[] arr = CalculateLargeNumber(100);
                string str = "";
                for (int i = arr.Length-1; i >=0 ; i--)
                {
                    str += arr[i].ToString();
                }
                Console.WriteLine(str);
                Console.ReadKey();
            }
      

  4.   


               int[] result = new int[200];
               result[0] = 1;
               int intPosition = 0;           for (int i = 2; i <= 100; i++)
               {
                   int intNext = 0;
                   for (int j = 0; j <= intPosition; j++)
                   {                   int temp = result[j] * i + intNext;
                       result[j] = temp % 10;
                       intNext = temp / 10;                   if (j == intPosition && temp >= 10)
                       {
                           intPosition += 1;
                       }
                   }
               }
               bool blnFlag = false;
               StringBuilder strResult = new StringBuilder();
               for (int i = 199; i >= 0; i--)
               {
                   if (result[i] == 0 && !blnFlag)
                   {
                       continue;
                   }
                   blnFlag = true;
                   strResult.Append(result[i].ToString());
                   Console.Write(result[i].ToString());
               }
               Console.WriteLine(strResult.ToString());
               Console.ReadKey();