首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算第n个加泰罗尼亚数

计算第n个加泰罗尼亚数
EN

Stack Overflow用户
提问于 2014-08-28 02:34:44
回答 2查看 3.1K关注 0票数 1

我写了一些代码来计算N个加泰罗尼亚数。但是,当N=20和以后的时候,它没有返回正确的结果。但是当N<20是正确的时候,结果是正确的,所以我不知道什么是错的。

所以,当N=20,它应该返回6564120420,但它返回2269153124给我。

有人能给我指明正确的方向吗?

代码语言:javascript
复制
#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;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-28 02:40:27

您超过了允许存储的变量类型的最大大小。

long long类型是你最好的选择。

您可以在这里查看不同类型整数的最大值是什么:http://www.cplusplus.com/reference/climits/

票数 1
EN

Stack Overflow用户

发布于 2014-08-29 03:31:06

用“无符号长长”代替“无符号int".`

代码语言:javascript
复制
#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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25539844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档