【问题标题】:Why this Factorial function returning zero for large numbers [duplicate]为什么这个阶乘函数对大数返回零 [重复]
【发布时间】:2011-12-22 06:55:19
【问题描述】:

可能重复:
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 等数字。它会返回零。我假设它超出了限制范围。无论我输入什么数字,请帮助我返回确切的结果。

【问题讨论】:

  • 如果你总是想要精确的数字,你需要使用 bignum 库
  • 如果您只想要一个简单的函数来帮助您玩 C++,请尝试使用斐波那契数列。 Factorial 发展得太快了,不好玩。

标签: c++


【解决方案1】:

因子是巨大的

34! = 295232799039604140847618609643520000000

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-21
    • 2018-05-30
    • 2019-05-21
    • 1970-01-01
    • 2020-02-22
    • 1970-01-01
    • 2020-06-17
    • 2023-01-01
    相关资源
    最近更新 更多