【发布时间】:2013-11-19 09:47:36
【问题描述】:
我在实现 Karatsuba 算法时遇到了一些问题。我的项目限制我使用以下库:iostream、iomanip、cctype、cstring。此外,我仅限于使用整数内置类型和数组/动态数组来处理数字(只会输入无符号整数)。我已经构建了一个类来使用动态数组处理任意大小的整数。我需要实现一个将大整数相乘的函数,如果可能的话,我想使用 Karatsuba。我遇到的麻烦是如何分解大整数并进行算法中要求的乘法运算。我认为这应该递归完成。我希望有人能给我一个如何做到这一点的例子。
例如:
我有两个数字存储在动态数组中。假设他们是:
X = 123456789123456789123456789 Y = 987654321987654321987654321987654321
考虑到 unsigned int 类型的存储限制,Karatsuba 需要如何处理这个问题?任何帮助将不胜感激!
【问题讨论】:
-
强加这种任意条件通常是一个不好的迹象。家庭作业,我想,和一个糟糕的老师?我建议无论如何都使用
vector,让它工作,然后重新实现您需要的vector中的位。 (我个人会称之为nonstd::vector<>,但这些老师不会得到提示)。作业与否,你应该展示你迄今为止尝试过的东西(使用 Karatsuba,而不是你的<vector>副本)。 -
很久以前,我为我的“LargeInt”C++ 类搜索了一个快速乘法例程,但从未找到。我可能需要挖掘我的旧代码并实现它。