[c++] n番目のカタロニア語の数を計算する



Answers

"unsigned int"の代わりに "unsigned long long"を使用してください。

#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;
}
Question

私は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;
}



Links