【问题标题】:Store very big numbers in an integer in C在C中将非常大的数字存储在整数中
【发布时间】:2013-10-13 07:22:59
【问题描述】:

我需要在 C 程序中将一个非常大的数字存储为整数,unsigned long int 仍然太小,我需要一个仍然可以使用模运算符 (%) 的非常大的数据类型。

【问题讨论】:

  • unsigned long long 怎么样?这通常是 64 位。
  • 使用任意精度整数库 (some links here)
  • 有时可以避免模运算本身。如果您可以使用模算术来完成所有算术运算,并且只取最终结果的模数,那么可以放弃模运算。
  • 编写您自己的“双精度长”支持。没那么难。
  • “我需要一个非常大的数据类型”是一个无限的目标。提供更多详细信息。

标签: c numbers integer


【解决方案1】:

有几个库可以做到这一点

如果您需要它用于加密目的(例如,您需要模算术暗示的 RSA),OpenSSL BN 非常适合

【讨论】:

  • 这是一个具有挑战性的问题,而不是密码学,大数算术或密码例程是错误的方法。 (我从问题文本中怀疑,但 OP 的历史显示了关于 Project Euler 的先前问题。)我希望问题被设计为在正常整数范围内,只要模数属性被智能使用。
  • 是的,我正在尝试找出 12 位数字的因子数
  • @DylanCleaver:如果您的 C 实现支持,请包含 <stdint.h> 并使用 uint64_t。如果您需要从输入中读取大量数字,您可能还需要 <inttypes.h> 及其提供的格式说明符。
【解决方案2】:

我只是想扔另一个库来解决这个问题,我刚刚完成:

它比前面提到的库更轻量级。请确保它仍然可以解决您的需求,因为存在一些限制。

作为一个例子,你可以像这样进行模运算:

char i[20] = "5005";
kmbint_mod(i, "10");
// i is now "5"

【讨论】:

    猜你喜欢
    • 2023-04-01
    • 1970-01-01
    • 2021-09-19
    • 2022-06-15
    • 1970-01-01
    • 2015-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多