为什么这个因子函数对于大数字返回零

时间:2011-12-22 06:55:20

标签: c++

  

可能重复:
  Calculating factorial of large numbers in C

首先,我是C ++的新手。我已经尝试过以下程序来计算任何数字的阶乘。

#include <iostream>
using namespace std;
unsigned long factorial(unsigned long n){
   return n <= 1 ? 1 : n * factorial(n-1);
}

int main()
{
  cout << "Enter any Number to calculate factorial." <<endl;
  unsigned long n;
  cin >> n ;
  cout << factorial(n)    ;
}

如果我给出像5,3,20这样的小数字,它会返回我的确切值。但是,如果我给出像34等数字。它会让我归零。我认为它超出了极限范围。无论我输入什么号码,请帮我解决这个问题。

1 个答案:

答案 0 :(得分:6)

因子巨大

34! = 295232799039604140847618609643520000000

这几乎不适合128位。如果您的编译器支持128位数字类型,则可以使用它来计算最多34的阶乘。如果不是,或者如果您需要更大的数据,则需要使用某种bignum库。