存储和使用300位整数

时间:2012-11-01 17:40:11

标签: c

int main()
{
    unsigned long long key = 21739827982173982173921739217392173217397213271832193721973291732917321732132173971317382173213782163872163872163872163872163826176728328621321487219372198371298775647326409817402198732198432974329479832749173821732198732173217392173721372193728193782193792173921732171;
}

编译器说我想要分配的数字对于所选类型来说太大了。如何存储然后执行操作?

3 个答案:

答案 0 :(得分:6)

C没有任何内置支持。您需要一个“bignum”库(也称为“任意精度算术”或“多精度算术”库)。 GNU MP已有详细记载并且很受欢迎。

编辑:我刚注意到你的变量被命名为“key”,而且这个数字看起来大约是900位。您是否尝试实施RSA?如果是这样,你真的应该使用经过充分测试的加密库;您可以在RSA实施中做出许多微妙的错误,这些错误会损害您的安全性。其中的选项包括gcryptNSSOpenSSL。如果你可以与libgcrypt许可兼容,我强烈建议使用它,因为它的API和文档比其他两个更好。

答案 1 :(得分:3)

您可以从此处获取任意精度的整数库。

http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic#Arbitrary-precision_software

您可以使用任意精度库来处理大数字。

你可以使用double - 它有大约300位的范围,但只有53位的精度,因为它存储为两个部分,一个指数和一个尾数。 53位为您提供15-18位精确范围内的数字

答案 2 :(得分:1)

在大多数情况下,你需要一个大整数或任意精度的数学库。 (C的整数类型很少,如果有那么大;可能会有专业编译器发生,但它们并不是主流。即使你设法找到这样的编译器,你的代码也不会是可移植的。)

查看GMP