我必须通过在C++中使用矢量来执行乘法运算,所以例如要将数字123和528相乘,我必须将每个数字存储在一个矢量中并将它们相乘。乘法算法由我的导师提供。以下段落的第一行可能看起来有点令人困惑,但我想让你知道我正在重载运算符*以通过使用向量执行两个数字之间的乘法运算。了解矢量乘法
ubigint :: operator *中的乘法是通过分配一个新的向量来实现的,该向量的大小等于其他两个操作数的大小之和。如果u是大小为m的矢量,v是大小为n的矢量,则以O(mn)速度对一个参数执行外部循环,对另一个参数执行内部循环,将新的部分产品添加到产品p就像你手中那样。该算法可以在数学上描述如下:
p ←Φ
for i ∈ [0, m):
c ← 0
for j ∈ [0, n):
d ← p_{i+ j} + u_iv_j + c
p_{i+ j} ← d % 10
c ← ceil(d÷10)
p_{i+n} ← c
注意,区间[a,b)中是指集合{X |一个≤X < B},即,一个半开区间,包括但不包括b。以同样的方式,C++中的一对迭代器限定了一个时间间隔。
问题是我不清楚这个算法是如何工作的。例如,什么是u_iv_j ?.任何人都可以清楚这一点吗?
我相信这意味着'u_i×v_j' –
你可能已经教过这种算法 - 但是以一种非正式的方式 - 当你很少,并已经使用过它几百次。 – molbdnilo
你的意思是什么“矢量乘法”?请定义或参考!你所说的与我所知的两件事都没有什么共同之处。他们没有连接到数字乘法。顺便说一句,你是混合数字和数字,你有没有注意到? – Gangnus