c - 如何在内存中存储任意大的整数值?

标签 c memory-management integer integer-arithmetic

我必须存储一个大于 long 数据类型最大值的整数值。我如何在内存中存储和操作这个值?

如果可能,请举例说明。

最佳答案

考虑使用如下结构将数字存储为十进制数字序列:

struct num {
    int ndigits;
    char d[MAXDIGITS];
};

例如,数字123456可以初始化为

struct num n = { 6, { 6, 5, 4, 3, 2, 1 } };

事实证明,颠倒的数字顺序对于简化计算很重要。特别地,n.d[i]的位值为n.d[i] * 10^i。

现在,有几个问题:

  • 如何将一个加到 num 中?
  • 如何将任意一个数字添加到 num 中?
  • 如何将两个 num 相加?
  • 如何将 num 乘以二?
  • 如何将 num 乘以一个数字?
  • 如何将 num 乘以 10?
  • 如何将两个 num 相乘?提示:做一些纸笔乘法,看看它们是如何计算的。

如果你解决了这一系列问题,你应该能够为每个步骤编写一个函数,并重新使用这些函数来回答后面的问题,并最终得到一个非常简单且未优化的长(好吧,向上到 MAXDIGIT 位)整数包,用于正数的加法和乘法。

其他问题:

  • 您如何概括 num 来表示负数和正数?
  • 如何将一个 num 除以另一个(忽略余数)?这比乘法更棘手,但同样,先用铅笔和纸做一些长除法,然后仔细考虑你所做的事情。

关于c - 如何在内存中存储任意大的整数值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2252896/

相关文章:

c - 向nor flash发送命令

binary - 仅使用位逻辑查找二进制中两个整数的最大值

java - 注释会影响编译时间吗?

c - 为什么嵌套的if语句在没有条件要求的情况下会输出true?

c++ - std::string 构造函数中的内存分配/堆损坏

objective-c - 引擎盖下的 __weak 限定变量是怎么回事?

integer - 8 位、16 位、32 位处理器/微 Controller 中整数的大小是多少?

c++ - 表示 2000 位或更多位的整数

c - 在 C 中实现一个非矩形数组

ios - 对象似乎被释放,但内存占用不断增加