【问题标题】:How to store a very large number in c++ [duplicate]如何在c ++中存储一个非常大的数字[重复]
【发布时间】:2015-06-30 22:09:00
【问题描述】:

有没有办法在 C++ 中存储 1000 位数字?我尝试将它存储到一个无符号长双精度但它的类型仍然很大。

【问题讨论】:

  • 多种方式。在此处或在网络上搜索“big int library”。
  • 我怀疑你可以在“unsigned long double”中放入任何东西......
  • 另一个想法出现了——你的 1000 位数字数据源是什么?它是偶然的文字吗?
  • @ddriver。是的,它是一个字面量。
  • 好吧,这行不通,C++ 不支持这种大小的文字。 IIRC 大数字库通常将数字作为字符串而不是数字文字输入。

标签: c++


【解决方案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&lt;int8_t&gt; 或类似的东西(甚至是std::string)会使用更少的内存。
【解决方案2】:

您必须自己实现它或使用库。我特别喜欢 GMP:https://gmplib.org/,它是 Big Int/Float 的 C 实现并具有 C++ 包装器

【讨论】:

    【解决方案3】:

    你可以在这里找到你的答案How to store extremely large numbers?GMP 答案听起来是对的,即这就是它对 pi 数字的作用https://gmplib.org/pi-with-gmp.html

    【讨论】:

    【解决方案4】:

    取决于使用情况。如果您需要对其进行计算,可能会使用 Big Int Library。如果不是并且唯一的目的是存储,则将其存储在一个数组中,每个数字都存储在一个数组元素中。

    【讨论】:

      【解决方案5】:

      【讨论】:

        猜你喜欢
        • 2021-09-19
        • 2013-10-13
        • 2011-10-15
        • 2022-08-15
        • 1970-01-01
        • 2022-06-15
        • 2011-07-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多