我必须存储一个大于 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/