C++ 定义了 long long 但输出有限

C++ defined long long but the output is limited

我目前正在学习C++,所以我是初学者。我想我会制作一个小程序来生成贝塞尔多项式项。这是程序:

#include <iostream>

// x!
long long fact(const long long &x)
{
  long long z {1};
  for (long long i=1; i<=x; ++i)
    z *= i;
  return z;
}

// 2^n
long long pwr2(const int &n)
{
  long long z {1};
  for (long long i=0; i<n; ++i)
    z *= 2;
  return (n == 0 ? 1 : z);
}

// Bessel coefficients
long long bessel(long long *a, const long long &N)
{
  for (long long i=0; i<=N; ++i)
    a[i] = fact(N + i) / (pwr2(i) * fact(N - i) * fact(i));
  return *a;
}

int main()
{
  std::cout << "N = ";
  long long N;
  std::cin >> N;

  long long *a {new long long[N + 1]};
  *a = bessel(a, N);

  for (long long i=0; i<=N; ++i)
    std::cout << a[i] << ( i<N ? " " : "\n");

  delete a;
  a = nullptr;

  return 0;
}

N=10 好像是极限了。 sizeof(long long) 显示 8 (archlinux x64)。 fact(20) > (2^64)-1,所以我卡住了,即使是 long long。有没有办法绕过这个限制?

代码如你所见,是我走投无路把所有int修改为long long之后的。我什至在所有数字中添加了"ll",没有任何效果。我什至从分母中删除了主要括号并排列了这些项,以便它们逐渐分开以某种方式平衡它们自己,例如: fact(N+i)/fact(N-i)/fact(i)/pwr2(i),也没有效果。

您不能对本机类型做您想做的事,因为它们受位大小的限制。 但是你可以使用一些库来完成这些(This is one such example) 如果你真的需要它(但是根据你的问题,你只是在学习 c++ 所以我想你不需要那些)