最基本的一种做法,数据类型为 unsigned long int 型,可以求到32 ,从33开始就溢出了。要想求比较大的数的阶乘该怎么办?
另:如果不用递归的办法,那该怎么求阶乘,我想了半天,居然一点思路也无!!还是请高手指点一下迷津吧。// n的阶乘递归版
//2004-07-14
//=================
//函数:unsigned long int digui( unsigned long int x )
//入口参数:unsigned long int x 需要求阶乘的值
//返回值:价乘值
//=================
#include <iostream.h>
#include <math.h>
unsigned long int digui( unsigned long int x );
void main()
{
int n;
cout << "please input a number:  ";
cin >> n ;
cout << endl ;
cout << n  << " 的阶乘为:";
cout << digui( n ) << endl;
}unsigned long int digui(  unsigned long int x )
{
//cout << "this is digui function , the x is :" << x << endl;
if ( x==0||x==1 ) return 1;
if ( x>1 ) return x*digui( x-1 );}

解决方案 »

  1.   

    /* 用来计算可以容纳40位数的求N!的程序.例如你想求出30的阶乘,因为int 类型的整数范围在 -32768~~32768.所以能不下,只能通过数组转换来存储
    */
    #include <stdio.h>
    #include <conio.h>
    main()
    {
        int i,j,k,r,data,temp;
        int aa[40];
        k=1;
        printf("\nEnter an interager:");
        scanf("%d",&data);
        for (i=0;i<40;i++)
            aa[i]=0;
        aa[0]=1;
        for (i=1;i<=data;i++)
        {
            for (j=0;j<k;j++)
                aa[j]*=i;
            for (j=0;j<k;j++)
                if (aa[j]>=10)
          {
                    if (aa[k-1]>=10)
                  k++;
                    aa[j+1]+=aa[j]/10;
                    aa[j]%=10;
          }
            printf("\n%d!=",i);
            for(j=k-1;j>=0;j--)
                printf("%d",aa[j]);
        }
      printf("\nEnter a key to resume . . .");
      getch(); 
    }
      

  2.   

    楼主把它该成c++就可以了,这个市tc编译通过的程序。
      

  3.   

    #include "iostream.h"
    void main()
    {int i,n;
     long double N;
     cout<<"输入一个整数:";
     cin>>n;
     if(n==1)
    N=1;
     else
    {N=1;
     for(i=2;i<=n;i++)
          N=N*i;
     }
      cout<<N<<endl;
    }阶乘,实在太大了.
      

  4.   

    to : weally(鹍鹏元帅) 
    高精运算目前不会,不过,你要是讲一讲我一准会。
      

  5.   

    1 在Turboc2.0 下,int类型的数范围是 -32768 ___ 32767 
       故到32!左右出错,在VC下,int类型占用4个字节,
       就没有这个问题了,(当然足够大时还会溢出),
      

  6.   

    1 在Turboc2.0 下,int类型的数范围是 -32768 ___ 32767 
       故到32!左右出错,在VC下,int类型占用4个字节,
       就没有这个问题了,(当然足够大时还会溢出),
      

  7.   

    32!左右出错的原因是int aa[40];数组大小的问题,把数组再放大就可以了。如果要用算法来求N!就是用数组来存放数据的。