如何存储极大的数字?

Posted

技术标签:

【中文标题】如何存储极大的数字?【英文标题】:How to store extremely large numbers? 【发布时间】:2013-08-06 06:47:22 【问题描述】:

例如,我有一个阶乘程序,它需要保存非常大的整数,其长度可能超过 50 位。 C++ 中的绝对最大原始数据类型是 unsigned long long int,最大值为 18446744073709551615,只有 20 位长。这是 C++ 限制的链接:http://www.cplusplus.com/reference/climits/

如何将大于某个变量的数字存储在某种变量中?

【问题讨论】:

使用 bigint 库。 GNU GMP 是一个很好的开始。 【参考方案1】:

如果您已经有了 boost 依赖项(现在很多人都这样做了),您可以使用 boost multi-precision library。事实上,它已经有一个 factorial program 的示例,它可以支持高达 128 位的输出,尽管进一步扩展它非常简单。

【讨论】:

感谢您指出这一点,我不知道 boost 已经发展到这样了。【参考方案2】:

您必须使用 bigint 或 bignum 实现。有一些图书馆是这样的:http://gmplib.org/

更多信息和库列表:http://en.wikipedia.org/wiki/Bignum

【讨论】:

【参考方案3】:

你可以使用数组。首先你应该复制那个巨大的数字数组,然后在 19 位后使用逗号:

unsigned long long int num[]= 
        7316717653133062491,9225119674426574742,3553491949349698352,0,312774506326239578,3180169848018694788,
        5184385861560789112,9494954595017379583,3195285320880551112,5406987471585238630,5071569329096329522,
        7443043557668966489,5044524452316173185,6403098711121722383,1136222989342338030,8135336276614282806,
        4444866452387493035,8907296290491560440,7723907138105158593,0,7960866701724271218,8399879790879227492,
        1901699720888093776,6572733300105336788,1220235421809751254,5405947522435258490,7711670556013604839,
        5864467063244157221,5539753697817977846,1740649551492908625,6932197846862248283,9722413756570560574,
        9026140797296865241,4535100474821663704,8440319989000889524,3450658541227588666,8811642717147992444,
        2928230863465674813,9191231628245861786,6458359124566529476,5456828489128831426,0,7690042242190226710,
        5562632111110937054,4217506941658960408,0,7198403850962455444,3629812309878799272,4428490918884580156,
        1660979191338754992,0,0,5240636899125607176,0,6058861164671094050,7754100225698315520,0,0,
        5593572972571636269,5618826704282524836,0,0,8232575304207529634,50;

【讨论】:

为什么要在 19 位后加逗号? 由于 long long int 的大小 另一种解决方案是bigint或bignum实现 ***.com/q/1055661/8678385 你可以在这里找到 BigInt 库。【参考方案4】:

有很多方法可以存储非常大的数字,如下所示:

    字符串 文件 链接列表 矢量/动态数组

注意:请不要使用数组以避免内存问题。

【讨论】:

静态数组还是全局数组呢? 静态数组或全局数组不是很好的选择,因为如果连续内存不可用,那么你就不能存储很大的数字。

以上是关于如何存储极大的数字?的主要内容,如果未能解决你的问题,请参考以下文章

数字信号去噪基于matlab改进的小波模极大值数字信号去躁含Matlab源码 1710期

千万项APaaS低代码平台,企业数字化转型利器

数字货币交易所系统开发软件模式

如何在数字字段的条件下将逗号分隔的数字字符串传递给存储过程?

如何在数组中存储连续数字,bash脚本?

如何使用科学计数法存储数字?