Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 阶乘不适用于所有值_C++_Function_Factorial - Fatal编程技术网

C++ 阶乘不适用于所有值

C++ 阶乘不适用于所有值,c++,function,factorial,C++,Function,Factorial,大家好,我编辑了我的文章,因为我的代码还有一个问题。昨天我的阶乘函数有一个问题,但多亏了你们的回答,我终于解决了,这是一个可笑的错误。 现在的问题是,对于一些大于15的值,对于较小的值,最终结果(而不是单个数字的阶乘)总是0或-1。有人能告诉我这段代码有什么问题吗: #include <iostream> #include<time.h> using namespace std; int factorial(int a){

大家好,我编辑了我的文章,因为我的代码还有一个问题。昨天我的阶乘函数有一个问题,但多亏了你们的回答,我终于解决了,这是一个可笑的错误。 现在的问题是,对于一些大于15的值,对于较小的值,最终结果(而不是单个数字的阶乘)总是0或-1。有人能告诉我这段代码有什么问题吗:

    #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;
       }
#包括
#包括
使用名称空间std;
整数阶乘(整数a){
如果(a==1)
返回1;
如果(a==0),则为else
返回1;
其他的
收益阶乘(a-1)*a;
}
int main(){
std::cout.setf(std::ios\u base::fixed,std::ios\u base::floatfield);
标准:计算精度(5);
int n,k;
整数x,y,z,w,v;
coutn;
库特克;
时钟;
t=时钟();
如果(n>=k&&k>1){
x=阶乘(n-1);
y=阶乘(k-1);
z=阶乘(n-1-k);
w=阶乘(n-k);
v=阶乘(k);

cout以下可能使用零或负参数调用
factorial

z=factorial(n-1-k);
w=factorial(n-k);

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

以下函数可能使用零或负参数调用
factorial

z=factorial(n-1-k);
w=factorial(n-k);
您需要确保您的
阶乘
函数能够在不崩溃的情况下处理此类参数(我怀疑它不会崩溃)。

整数溢出

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

如果使用64位整数类型,例如
long
,则最多可以使用20个阶乘

浮点数会给你更多的范围,但会损失精度

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

整数溢出

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

如果使用64位整数类型,例如
long
,则最多可以使用20个阶乘

浮点数会给你更多的范围,但会损失精度


如果您真的需要计算大的阶乘,那么您需要使用一些多精度库,比如,或者使用一种内置了任意精度整数算法的语言(C没有).

您需要向我们显示
阶乘的代码。明白了!-确保在进行除法时,不会遇到被零除的错误,即
v*z
y*w
的值应该是非零。发布
阶乘
函数可以让我们更深入地了解出了什么问题。嗯,您没有说它崩溃的地方。当它崩溃时,使用调试器查看发生了什么。您需要向我们显示
factorial
的代码。明白了!-确保在进行除法时,不会遇到被零除的错误,即
v*z
y*w
的值应该是非零。发布
factorial
函数tion会让我们更深入地了解出了什么问题。嗯,你没有说它在哪里崩溃。当它崩溃时,请使用调试器查看发生了什么。谢谢你,我刚刚意识到我忘记了计算阶乘函数中的零阶乘。我甚至不在乎看函数,因为我从一个旧的练习我一直在考虑,直到现在都是正确的。谢谢你,我刚刚意识到我忘记了计算阶乘函数中的零阶乘。我甚至不在乎看这个函数,因为我是从一个旧练习中复制粘贴的,我一直在考虑,直到现在都是正确的。谢谢你的答案,我会自己学习更多,看看我是否会改变一个我的代码上的任何东西。因为它在技术上是正确的,尽管我不认为我会因为不能计算所有值而受到惩罚。谢谢你的回答,我会自己多研究一点,看看我是否会修改代码。因为它在技术上是正确的,尽管我不认为我会因为不能计算所有值而受到惩罚