【发布时间】:2012-01-09 07:36:31
【问题描述】:
我正在尝试为比 long long 更大的非常大的整数编写这个自定义加法类。我正在研究的一种方法是将整数保留为字符串,然后将字符转换为其 int 组件,然后添加每个“列”。我正在考虑的另一种方法是将字符串拆分为多个字符串,每个字符串的大小为 long long,然后使用字符串流将其转换为 long long 添加然后重新组合。
尽管我遇到了这样一个事实,即加法最容易反向完成以允许数字的结转。在这种情况下,我想知道字符串的插入方法的效率。似乎因为字符串是一个字符数组,所以所有字符都必须移到一个上。所以它会有所不同,但似乎效率是 O(n),其中 n 是字符串中的字符数。
这是正确的,还是只是幼稚的解释?
编辑:我现在已经回答了我的问题,但我想知道一个更有效的相关主题,将字符串插入流中然后提取到 int 中。还是做 10^n*char1+10^n-1*char2...等?
【问题讨论】:
-
不要将其保存在对显示有效的格式中,将其保存在对操作有效的格式中。当你想显示它时,你只想将它转换为字符串。
-
不要重新发明轮子。已经有一些库可以为您实现大整数,效率更高,并且已经过测试!
-
是的,我下载了 gmp 库,我只是不知道如何让它工作。另外,我认为做这样的事情将帮助我更多地了解比特、效率和其他东西。如果你们不这么认为,我很乐意继续提出任何其他建议。
-
@amit 对生产代码的好建议,但他可能只是为了好玩。
-
@emschorsch 考虑使用
std::deque——它确实在 O(1) 的前后插入/删除。此外,以二进制形式存储多精度整数(对每个块使用完整整数)效率更高,并且使用相同的算法。
标签: c++ string performance