none
C++算法 RRS feed

答案

  • 你好,

     

    首先关于阶乘最大的问题是在如何保存极大数。不管是intlong都不是无法应对100!。因为它的位数超过了150位。所以你可以采用科学计数法或者数组。因为阶乘的数越大,其倒数越接近0,所以为了提高精度,可以采用同分母。这里是部分关于阶乘的算伐,是采用科学计数法。希望对您的疑问有所帮助

    LONG Factorial(LONG n, double& m, LONG& ex)

    {

     if(n<=32) {

      LONG res(1);

      for(LONG i(1);i<=n;i++)

      {

       res*=i;

      }

      ex=0;

      return res;

     } else {

      double res(1.0);

      for(LONG i(1);i<=n;i++)

      {

       double N = i;

       int p= (int)(log(res) / log(10.0));

       p--;

       if(p>1)

       {

        res /= (pow(10.0,p));

        ex += p;

       }

       res*=N;

      }

      if(res>10)

       {

        int p= (int)(log(res) / log(10.0));

        res /= (pow(10.0,p));

        ex += p;

       }

      m=res;

      LONG resn(0);

      return resn;

     }

    }


    Rob Pan [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 Rob Pan 2011年5月27日 2:26
    2011年5月24日 2:10
  • 阶乘的算法

    int   fact(int  n)

    {

    int   x;

    long  int  y;

    x = n - 1;

    y = fact (x);

    return (n*y);

    }


    xiao
    • 已标记为答案 Rob Pan 2011年5月27日 2:26
    2011年5月24日 14:00

全部回复

  • 你好,

     

    首先关于阶乘最大的问题是在如何保存极大数。不管是intlong都不是无法应对100!。因为它的位数超过了150位。所以你可以采用科学计数法或者数组。因为阶乘的数越大,其倒数越接近0,所以为了提高精度,可以采用同分母。这里是部分关于阶乘的算伐,是采用科学计数法。希望对您的疑问有所帮助

    LONG Factorial(LONG n, double& m, LONG& ex)

    {

     if(n<=32) {

      LONG res(1);

      for(LONG i(1);i<=n;i++)

      {

       res*=i;

      }

      ex=0;

      return res;

     } else {

      double res(1.0);

      for(LONG i(1);i<=n;i++)

      {

       double N = i;

       int p= (int)(log(res) / log(10.0));

       p--;

       if(p>1)

       {

        res /= (pow(10.0,p));

        ex += p;

       }

       res*=N;

      }

      if(res>10)

       {

        int p= (int)(log(res) / log(10.0));

        res /= (pow(10.0,p));

        ex += p;

       }

      m=res;

      LONG resn(0);

      return resn;

     }

    }


    Rob Pan [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 Rob Pan 2011年5月27日 2:26
    2011年5月24日 2:10
  • 阶乘的算法

    int   fact(int  n)

    {

    int   x;

    long  int  y;

    x = n - 1;

    y = fact (x);

    return (n*y);

    }


    xiao
    • 已标记为答案 Rob Pan 2011年5月27日 2:26
    2011年5月24日 14:00