1

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;
}
4

2 に答える 2

1

これらの変数タイプで保存できる最大サイズを超えています。

long longタイプはあなたの最善の策です。

さまざまなタイプの整数の最大値については、こちらを参照してください: http://www.cplusplus.com/reference/climits/

于 2014-08-28T02:40:27.857 に答える