如何在C++中存储一个非常大的数字

6
有没有办法在C++中存储一个1000位数?我试过将其存储为无符号长双精度,但它仍然太大了。

1
有很多方法。在这里或者网上搜索“大整数库”。 - Drew Dormann
2
我怀疑你可能无法在“unsigned long double”中放入任何东西... - dtech
还有一个想法-你的1000位数数据源是什么?它是一个字面值吗? - dtech
@ddriver。是的,这是一个字面意思。 - wazalak
好的,它不会起作用,C++ 不支持这样大小的字面量。如果我没记错的话,大数库通常将数字输入为字符串而不是数字字面量。 - dtech
5个回答

4

C++标准库中没有包含GMP吗? - wazalak
1
看起来不是这样,但你可以从那里下载并加载到你的项目中,点击这里获取帮助:https://dev59.com/iGkv5IYBdhLWcg3wxjrQ - sed

1
使用自定义类来表示你的数字,例如:
#include <vector>
#include <iostream>

    class large_num {
     private:
        int digits;    // The number of digits in the large number
        std::vector<int> num;    // The array with digits of the number.
     public:
        // Implement the constructor, destructor, helper functions etc.
    }

对于非常大的数字,只需将每个数字添加到向量中即可。例如,如果数字为123456,则执行num.pushback()。在这种情况下,将所有数字1、2、.. 6推入。您可以使用此方法存储极大的数字。


对于学习C++的人来说,这不是一个坏的方法,作为一个项目,但有一些小问题:num已经有了.size()功能,所以digits是多余的,而且另一件可能会失去同步的事情是,std::vector<int8_t>或类似的(甚至是std::string)将使用更少的内存。 - Tony Delroy

1

你必须自己实现,或者使用一个库来完成。特别是我喜欢 GMP: https://gmplib.org/ ,它是一个 C 实现的大整数/浮点数库,并且有 C++ 封装。


0

0

这取决于使用情况。如果需要对其进行计算,可能应该选择大整数库。如果不需要计算,只需存储,则将其存储在数组中,每个数字存储在一个数组元素中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接