大家好,我编辑帖子的原因是我的代码还有另一个问题。昨天我的阶乘函数有问题,但是由于您的回答,我设法解决了这个问题,这是一个荒谬的错误。现在的问题是,对于某些大于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;
}
大家好,我编辑我的帖子是因为我的代码还有另一个问题。昨天我的阶乘函数有问题,但是由于您的回答,我设法解决了这个问题,这真是荒唐...
整数溢出。
以下内容可能会使用零或负参数调用factorial
:
谢谢!好的答案,我忘记了int的限制