long long int的限制是什么?

Yas*_*ant 1 c++

我发现long long int的数值限制不足.在C++中是否还有其他数字类型,如java中的大整数?

我最近偶然发现了这个问题并且不知道如何处理它..... https://blog.codechef.com/2009/07/02/tutorial-for-small-factorials/

enc*_*eet 13

unsigned long long int是标准C++中的最大整数类型(它可以保存0到18的数字446 744 073 709 551 615),如果你想要更大的那些,你可能需要搜索一些这样的bignum库: http:// www .ttmath.org /

  • 该标准并未说明它可以容纳的数字有多大(或很小).这是依赖于实现的,应使用`std :: numeric_limits <unsigned long long> :: max()`进行验证 (4认同)
  • @Christophe - 标准**确实**要求每个整数类型覆盖最小范围。本质上,`unsigned long long` 必须至少为 64 位宽。 (2认同)
  • @Christophe-此“声明”通过C11标准第5.2.4.2.1节提出。 (2认同)

rba*_*ish 6

类型名称-long long

字节-8

值范围-–9,223,372,036,854,775,808至9,223,372,036,854,775,807

参考:Microsoft

  • OP未指定编译器。这取决于实现。 (4认同)

Sub*_*ari 5

您可以使用 C++ 库<boost/multiprecision/cpp_int.hpp> 解决此类问题。

例如:

#include <boost/multiprecision/cpp_int.hpp>
using boost::multiprecision::cpp_int;
using namespace std;
int main()
{
    cpp_int f = 1;
    for(int i = 1; i <= 100; i++)
        f *= i;
    cout << "100! = " << f << '\n';
}
Run Code Online (Sandbox Code Playgroud)

这将给出输出

100! = 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
Run Code Online (Sandbox Code Playgroud)

要了解有关 C++ boost 库的更多信息,您可以参考这里这里