我写了一些代码来计算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;
}发布于 2014-08-28 02:40:27
您超过了允许存储的变量类型的最大大小。
long long类型是你最好的选择。
您可以在这里查看不同类型整数的最大值是什么:http://www.cplusplus.com/reference/climits/
发布于 2014-08-29 03:31:06
用“无符号长长”代替“无符号int".`
#include <iostream>
using namespace std;
unsigned long long countTree(unsigned int N)
{
//used to store catalan numbers
unsigned long long catalan[N+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;
cout << countTree(x) << endl;
return 0;
}https://stackoverflow.com/questions/25539844
复制相似问题