顺序线性表之大整数求和C++实现(2)

//顺序输出顺序表中的元素
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;
}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/c5cac43b8a9ef4fa611cd43a7ad3db6b.html