下面是高精度乘法的函数。
具体实现为:从低位到高位遍历A中每一位,将该位与b相乘并加上进位t,取个位作为C中对应位置的值,并将十位及以上作为进位t。最后去除C末尾多余的0(如果有)。
注意这里假设A和b都是非负整数,并且A已经按照从高到低的顺序排列。如果需要支持负数或者无序数组,则需要进行额外处理。
// C = A * b, A >= 0, b >= 0
vector<int> mul(vector<int> &A, int b)
{
vector<int> C; // 存储乘积的大整数数组
int t = 0; // 进位初始化为0
for (int i = 0; i < A.size() || t; i ++ ) // 遍历A中每一位,直到进位t为0
{
if (i < A.size()) t += A[i] * b; // 如果还有A中的元素,则与b相乘并加上进位t
C.push_back(t % 10); // 取个位作为C中对应位置的值
t /= 10; // 将十位及以上作为进位t
}
while (C.size() > 1 && C.back() == 0) C.pop_back(); // 去除C末尾多余的0(如果有)
return C; // 返回乘积的大整数数组C
}