我写了一些代码来计算第 N 个加泰罗尼亚语数。但是,当 N=20 及以后时,它不会返回正确的结果。 N<20 时的结果是正确的,所以我不确定哪里出了问题。
所以,当 N=20 时,它应该返回 6564120420,但它为我返回了 2269153124。
有人能指出我正确的方向吗?
#include <iostream>
using namespace std;
unsigned long int countTree(unsigned int N)
{
//used to store catalan numbers
unsigned long int catalan[N+1];
//N(0)=N(1)=1
catalan[0]=catalan[1]=1;
int i,j;
for(i=2;i<=N;i++)
{
catalan[i]=0;
for(j=0;j<i;j++)
{
catalan[i]+=catalan[j]*catalan[i-j-1];
}
}
return catalan[N];
}
int main()
{
unsigned int x;
cout<<"Input N:"<<endl;
cin>>x;
unsigned long int result=countTree(x);
cout<<result<<endl;
return 0;
}
最佳答案
您超出了这些变量类型允许您存储的最大大小。
long long
类型是最好的选择。
您可以在这里查看不同类型整数的最大值:http://www.cplusplus.com/reference/climits/
关于c++ - 计算第 n 个加泰罗尼亚数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25539844/