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

yat*_*tin 10 c integer memory-management integer-arithmetic

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

如果可能的话,请通过一个例子来说明.

Dal*_*und 20

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

struct num {
    int ndigits;
    char d[MAXDIGITS];
};
Run Code Online (Sandbox Code Playgroud)

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

struct num n = { 6, { 6, 5, 4, 3, 2, 1 } };
Run Code Online (Sandbox Code Playgroud)

反转的数字顺序对于简单计算非常重要.特别是,地点值n.d[i]n.d[i]*10 ^ i.

现在,几个问题:

  • 你会如何添加一个num
  • 你会如何添加一个任意的单个数字num
  • 你会如何将两个加num在一起?
  • 你怎么会乘以num2?
  • 你会如何乘以一个num数字?
  • 你怎么会乘以num10?
  • 你会如何将两个相乘num?提示:做一些铅笔和纸张乘法,看看它们是如何工作的.

如果你完成这一系列的问题,你应该能够为每一步编写一个函数,并重复使用这些函数来回答后面的问题,最后得到一个非常简单且未经优化的长(最好是MAXDIGIT数字)用于正数加法和乘法的整数包.

其他问题:

  • 你如何概括num地表示负数和正数?
  • 你如何分开num(忽略剩余的)?这比乘法更棘手,但是再次,从做一些铅笔和纸张长的划分开始,仔细考虑你做了什么.


Sig*_*erm 8

可能的解决方案:
1)定义足够大的自定义整数类型以保存该值.128位整数足以容纳98474737475747374739399.
2)使用任何可用的bignum库.


Ami*_*mer 4

我不会给您代码,但我可以就采取的方法提出一些建议:

  1. 尝试将值存储为字符串并转换以执行计算
  2. 尝试将值分解为表示该值的一部分的多个整数
  3. 查找可以为您处理此问题的现有库

祝你好运

  • 特别是如果这是为了考试,我建议您考虑一下您在小学时的数学表现。你知道,加、进位 1、减、去掉 10 等等。如果你不能对字符串进行这些操作,那么你小学不及格,大学计算机科学也不及格。 (8认同)