-1

我已经编写了一个 c++ 程序,通过使用组合来查找第 n 个加泰罗尼亚语数,但我总是得到输出 0。请指出此代码中的错误:

#include <iostream>
using namespace std;

int fact(unsigned int x)              
{
     unsigned long long f = 1;
     for (int i = 1; i <= x; i++)
     {
         f = f*i;
     }
     return f;
}

int comb(int y, int z)      
{
    unsigned long long int c;
    c = fact(y) / (fact(z)*fact(y - z));
    return c;
}

int catalan(int b)
{   
    unsigned long long int a;
    a = (1 / (b + 1))*(comb((2 * b), b));
    return a;
}

int main()
{   
    int n;
    cout << "enter value of n for nth catalan number=";
    cin >> n;
    cout << n << " Catalan number=" << catalan(n) << endl;
    return 0;
}
4

1 回答 1

0

(1 / (b + 1))总是会为零。而是使用

a = comb(2 * b, b) / (b + 1);

此外,您使用 unsigned long long 进行计算。为什么不使用它作为返回类型而不是 int。

于 2018-01-10T01:31:08.907 回答