gpt4 book ai didi

c++ - 阶乘不适用于所有值

转载 作者:行者123 更新时间:2023-11-28 00:48:36 25 4
gpt4 key购买 nike

大家好,我编辑了我的帖子,因为我的代码还有另一个问题。昨天我遇到了阶乘函数的问题,但由于你的回答,我设法解决了它,这是一个荒谬的错误。现在的问题是,对于某些高于 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;
}

最佳答案

整数溢出。

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

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

float 会给你更大的范围,但会降低精度。

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

关于c++ - 阶乘不适用于所有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15178813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com