c++ - 如何有效地将大数存储在整数数组中?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:我希望能够加、减、乘、除这些带有大数字的数组,所以我的意思不仅仅是将字符串切分并将十进制表示形式存储在整数数组中,而是保留数字本身的位顺序以便能够计算进位。
解决方案
使用数组来存储大数的不同部分是完成这项工作的常用方法。要考虑的另一件事是考虑 s 的不同架构实现signed int
,这导致您不得不牺牲(这是处理大整数的普通库所做的)以允许signed
在unsigned
你的数字的一部分,或者你将如何实现不同的算术运算。
我通常不建议对long long
数组单元使用整数版本,因为它们通常不是架构的本机大小,所以为了给架构一些有效地做事的机会,我应该使用减少的(至少一位,能够看到从一个扩展数字到下一个扩展数字的执行情况unsigned
(例如,gnu **libgmp* 在每个数组单元上使用 24 位整数 --- 上次我检查过)。将其减小到大小的倍数也很常见,因此数字的位移和重新分配比在完整的位数组上char
进行位移更容易。31 bit
推荐阅读
- spotfire - SpotFire:参考两个(或更多)连续行添加计算列
- reactjs - OAuth oidc 在 SSR 反应应用程序中访问服务器端的用户信息
- java - IBM i Access 无法在 Fedora 上启动
- sql - Oracle 12c validate_conversion 没有给出正确的输出
- javascript - 如何正确检查名称是否在由对象(记录集合)组成的数组中可用?
- python-3.x - 使用 pip 执行安装后任务
- javascript - 如何在 countries.js 中设置默认国家并显示受尊重的国家?
- javascript - XMLHttpRequest 的异步错误时可能出现的问题?
- paypal - Paypal REST API v1 本地化错误消息
- python - 如何用只有一个标签的数据训练模型