template
SeqList Add(SeqList A, SeqList B)
{
SeqList C;
int lengthA = A.Length();
int lengthB = B.Length();
int len = max(lengthA, lengthB); // 取两个顺序表中长度较大的作为结果的长度
int carry = 0; // 进位
for (int i = 0; i < len; i++)
{
DataType sum = A.Get(i) + B.Get(i) + carry; // 将A[i]、B[i]和进位相加
C.Insert(i, sum % 10); // 取个位数作为结果的当前位
carry = sum / 10; // 更新进位
}
if (carry > 0) // 如果最后还有进位,则将进位放到结果的最高位
{
C.Insert(len, carry);
}
return C;
}
template
SeqList Mult(SeqList A, SeqList B)
{
SeqList C;
int lengthA = A.Length();
int lengthB = B.Length();
int len = lengthA + lengthB; // 乘积的长度为两个顺序表的长度之和
for (int i = 0; i < len; i++)
{
C.Insert(i, 0); // 初始化结果为0
}
for (int i = 0; i < lengthA; i++)
{
int carry = 0; // 进位
for (int j = 0; j < lengthB; j++)
{
DataType product = A.Get(i) * B.Get(j) + C.Get(i + j) + carry; // 将A[i]、B[j]和结果的当前位以及进位相乘
C.Set(i + j, product % 10); // 取个位数作为结果的当前位
carry = product / 10; // 更新进位
}
C.Set(i + lengthB, carry); // 将最后的进位放到结果的最高位
}
return C;
}
时间复杂度分析:
加法算法的时间复杂度为O(max(lengthA, lengthB)),其中lengthA和lengthB分别为A和B的长度。
乘法算法的时间复杂度为O(lengthA * lengthB),其中lengthA和lengthB分别为A和B的长度。