首页 > 解决方案 > 如何有效地将大数存储在整数数组中?C++

问题描述

大家好!我有一个家庭作业,我需要构建一个可以处理非常大数字的高精度计算器。这个分配的重点是现在允许将数组中的值存储为一个数字到单独的数组单元格。

那是数字的记忆表示

335897294593872

像这样

int number[] = {3, 3, 5, 8, 9, 7, 2, 9, 4, 5, 9, 3, 8, 7, 2};

不合法,

也不

char number[] = {3, 3, 5, 8, 9, 7, 2, 9, 4, 5, 9, 3, 8, 7, 2};

也不

std::string number("335897294593872");

我想要做的是将整数拆分为 32 位块,并将每个单独的块存储在单独的数组单元格数据类型中,其数据类型为 u32int_t。

由于我从键盘获得输入,因此我最初将所有值存储在 std::string 中,然后将它们放入整数数组中以执行操作。

如何将大数的二进制表示放入一个整数数组中,正确填充所有位?

先感谢您。

编辑:仅使用标准 C++ 库

EDIT2:我希望能够加、减、乘、除这些带有大数字的数组,所以我的意思不仅仅是将字符串切分并将十进制表示形式存储在整数数组中,而是保留数字本身的位顺序以便能够计算进位。

标签: c++arraysstringinteger

解决方案


使用数组来存储大数的不同部分是完成这项工作的常用方法。要考虑的另一件事是考虑 s 的不同架构实现signed int,这导致您不得不牺牲(这是处理大整数的普通库所做的)以允许signedunsigned你的数字的一部分,或者你将如何实现不同的算术运算。

我通常不建议对long long数组单元使用整数版本,因为它们通常不是架构的本机大小,所以为了给架构一些有效地做事的机会,我应该使用减少的(至少一位,能够看到从一个扩展数字到下一个扩展数字的执行情况unsigned(例如,gnu **libgmp* 在每个数组单元上使用 24 位整数 --- 上次我检查过)。将其减小到大小的倍数也很常见,因此数字的位移和重新分配比在完整的位数组上char进行位移更容易。31 bit


推荐阅读