//顺序输出顺序表中的元素
template<class DataType>
void SeqList<DataType>::PrintSeqList()
{
if (length < 1)
{
throw "顺序表中没有元素";
}
else
{
//顺序输出顺序表元素
for (int i = 0; i < length; i++)
{
cout << data[i] << " ";
}
cout << endl;
}
}
二、大整数求和头文件:BidIntegerAdd.h
//顺序线性表之大整数求和
#include<iostream>
//引入顺序线性表的头文件
#include"SeqList.h"
using namespace std;
SeqList<int> Add(SeqList<int>a, SeqList<int>b)
{
//定义中间变量,顺序线性表
SeqList<int> c = SeqList<int>();
//flag 是进位标志,i 为大整数的某一位
int flag = 0, i = 0;
//求大整数 a,b 的位数
int aLength = a.GetLength();
int bLength = b.GetLength();
//逐位计算加法直到某个大整数计算完毕
while (i < aLength&&i < bLength)
{
//计算第 i 位的值
c.Insert(i+1, (a.GetElement(i + 1) + b.GetElement(i + 1) + flag) % 10);
//计算第 i 位的进位
flag = (a.GetElement(i + 1) + b.GetElement(i + 1) + flag) / 10;
i++;
}
//计算大整数 A 余下的部分
for (; i < aLength; i++)
{
c.Insert(i + 1, (a.GetElement(i + 1) + flag) % 10);
flag = (a.GetElement(i + 1) + flag) / 10;
}
//计算大整数 B 余下的部分
for (; i < bLength; i++)
{
c.Insert(i + 1, (b.GetElement(i + 1) + flag) % 10);
flag = (b.GetElement(i + 1) + flag) / 10;
}
//如果最后有进位,则结果会多一位
if (flag == 1)
{
c.Insert(c.GetLength()+1, 1);
}
return c;
}
三、测试顺序线性表之大整数求和:TestBigIntegerAdd.h
//测试顺序线性表之大整数求和
#include<iostream>
//引入顺序表之大整数求和头文件
#include"BigIntegerAdd.h"
using namespace std;
int main()
{
//定义两个顺序线性表
int array1[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int array2[] = { 1, 1, 1, 1, 1, 1, 1, 1 };
SeqList<int>a = SeqList<int>(array1,9);
cout << "第一个大整数是:" << endl;
a.PrintSeqList();
SeqList<int>b = SeqList<int>(array2,8);
cout << "第二个大整数是:" << endl;
b.PrintSeqList();
SeqList<int>c = Add(a, b);
cout << "他们的和是:" << endl;
c.PrintSeqList();
return 0;
}