首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阶乘并不适用于所有值

阶乘并不适用于所有值
EN

Stack Overflow用户
提问于 2013-03-03 04:00:18
回答 2查看 2.9K关注 0票数 0

大家好,我编辑了我的帖子,因为我的代码有另一个问题。我昨天遇到了阶乘函数的问题,但多亏了你们的回答,我设法解决了它,这是一个荒谬的错误。现在的问题是,对于一些高于15的值,最终结果(不是单个数字的阶乘)始终是0或-1,对于较小的值,它是有效的fine.Can有人告诉我这段代码有什么问题:

代码语言:javascript
复制
    #include <iostream>
    #include<time.h>

    using namespace std;



    int factorial(int a){
    if(a==1)
      return 1;
    else if(a==0)
      return 1;
    else 
      return factorial(a-1)*a;

    }

    int main(){
    std::cout.setf(std::ios_base::fixed, std::ios_base::floatfield);
    std::cout.precision(5);
    int n,k;
    int x,y,z,w,v; 


    cout<<"give n : ";
    cin>>n;


     cout<<"give k : ";
     cin>>k;

     clock_t t;

        t = clock();



      if(n>=k&&k>1){

       x=factorial(n-1);
       y=factorial(k-1);
       z=factorial(n-1-k);
       w=factorial(n-k);
       v=factorial(k);


         cout<<"Result is "<<(x/(v*z))+(x/(y*w))<<endl;
       }
       else if (n==0||n==k)
         cout<<"Result is  1"<<endl;
       else
         cout<<"Result is  0"<<endl;


       t = clock() - t;
       cout<<"It took "<<t<<" clicks  ("<<((float)t)/CLOCKS_PER_SEC<<" seconds )"<<endl;    



       return 0;
       }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-04 02:44:13

整数溢出。

如果系统上的int为32位,则它可以表示的最大值是2147483647。13阶乘为6227020800

如果您使用64位整数类型,例如long long,则可以达到20阶乘。

浮点数可以提供更大的范围,但会损失精度。

如果你真的需要计算大的阶乘,你需要使用像GMP这样的多精确库,或者使用一种内置了任意精度整数运算的语言(C没有)。

票数 3
EN

Stack Overflow用户

发布于 2013-03-03 04:03:40

下面的代码可能会使用零参数或负参数调用factorial

代码语言:javascript
复制
z=factorial(n-1-k);
w=factorial(n-k);

您需要确保您的factorial函数能够在不崩溃的情况下处理这些参数(我怀疑它不会)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15178813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档