顺序线性表之大整数求和

大整数求和伪代码
  1、初始化进位标志 flag=0;
  2、求大整数 A 和 B 的长度:
    int aLength = a.GetLength();
    int bLength = b.GetLength();
  3、从各位开始逐位进行第 i 位的加法,直到 A 或 B 计算完毕:
    3.1、计算第 i 位的值:c.Insert(i+1, (a.GetElement(i + 1) + b.GetElement(i + 1) + flag) % 10);
    3.2、计算该位的进位:flag = (a.GetElement(i + 1) + b.GetElement(i + 1) + flag) / 10;
  4、计算大整数 A 或 B 余下的部分;
  5、计算结果的进位
注:用数组来存放大整数

一、顺序线性表头文件:SeqList.h

 //顺序线性表的头文件
#include<iostream> const int MaxSize = ;
//定义顺序表SeqList的模板类
template<class DataType>
class SeqList{
public:
  //顺序表无参构造器(创建一个空的顺序表)
  SeqList(){ length = ; }
  //顺序表有参构造器(创建一个长度为n的顺序表)
  SeqList(DataType array[], int n);
  //顺序表析构函数
  ~SeqList(){}
  //求顺序表的长度
  int GetLength(){ return length; }
  //顺序表按位查找,返回i位置的元素
  DataType GetElement(int i);
  //顺序表按值查找,返回该元素所在的位置
  int GetLocal(DataType x);
  //顺序表在指定的位置插入指定的元素
  void Insert(int i, DataType x);
  //顺序表删除元素,返回删除的元素
  DataType Delete(int i);
  //输出顺序表中的元素
  void PrintSeqList();
private:
  //一维数组,存放数据元素
  DataType data[MaxSize];
  //顺序表的长度
  int length;
}; //实现顺序表有参构造器
template<class DataType>
SeqList<DataType>::SeqList(DataType array[], int n)
{
  if (n > MaxSize)
  {
    throw "传入的顺序表长度过长";
  }
  //给顺序表的存储元素的数组赋值
  for (int i = ; i < n; i++)
  {
    data[i] = array[i];
  }
  //给顺序表的长度赋值
  length = n;
} //实现顺序表按位查找
template<class DataType>
DataType SeqList<DataType>::GetElement(int i)
{
  //判断是定的位置是否合理
  if (i < || i >length)
  {
    throw "位置有误";
  }
  else
  {
    //返回指定位置的元素
    return data[i - ];
  }
} //实现顺序表按值查找,返回该元素所在的位置
template<class DataType>
int SeqList<DataType>::GetLocal(DataType x)
{
  //遍历顺序表的元素
  for (int i = ; i < length; i++)
  {
    //判断指定的元素是否在顺序表中
    if (data[i] == x)
    {
      //返回指定元素在顺序表中的位置
      return (i + );
    }
  }
  //如果指定的元素不在顺序表中,则返回位置为0
  return ;
} //实现顺序表插入元素
template<class DataType>
void SeqList<DataType>::Insert(int index, DataType x)
{
  //判断插入的位置是否合理
  if (length >= MaxSize)
  {
    throw "顺序表已存放满";
  }
  if (index< || index>length + )
  {
    throw "插入元素的位置有误";
  }
  //如何插入的位置合理,则把顺序表中从最后位置到指定插位置的元素整体向后移动一个位置
  for (int j = length; j >= index; j--)
  {
    data[j] = data[j - ];
  }
  //给插入的位置放入指定的元素
  data[index - ] = x;
  length++;
} //实现顺序表删除指定位置的元素
template<class DataType>
DataType SeqList<DataType>::Delete(int index)
{
  //声明要取出的元素
  DataType x;
  //判断要删除的位置是否合理
  if (index< || index>length)
  {
    throw "删除的位置有误";
  }
  else
  {
    //取出指定位置的元素
    x = data[index - ];
    //将指定位置后的元素全部都向前移动一个位置
    for (int i = index; i < length; i++)
    {
      data[i - ] = data[i];
    }
    //删除顺序表中的元素后,其长度减1
    length--;
  }
  return x;
} //顺序输出顺序表中的元素
template<class DataType>
void SeqList<DataType>::PrintSeqList()
{
  if (length < )
  {
    throw "顺序表中没有元素";
  }
  else
  {
    //顺序输出顺序表元素
    for (int i = ; 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 = , i = ;
  //求大整数 a,b 的位数
  int aLength = a.GetLength();
  int bLength = b.GetLength();
  //逐位计算加法直到某个大整数计算完毕
  while (i < aLength&&i < bLength)
  {
    //计算第 i 位的值
    c.Insert(i+, (a.GetElement(i + ) + b.GetElement(i + ) + flag) % );
    //计算第 i 位的进位
    flag = (a.GetElement(i + ) + b.GetElement(i + ) + flag) / ;
    i++;
  }
  //计算大整数 A 余下的部分
  for (; i < aLength; i++)
  {
    c.Insert(i + , (a.GetElement(i + ) + flag) % );
    flag = (a.GetElement(i + ) + flag) / ;
  }
  //计算大整数 B 余下的部分
  for (; i < bLength; i++)
  {
    c.Insert(i + , (b.GetElement(i + ) + flag) % );
    flag = (b.GetElement(i + ) + flag) / ;
  }
  //如果最后有进位,则结果会多一位
  if (flag == )
  {
    c.Insert(c.GetLength()+, );
  }
  return c;
}

三、测试顺序线性表之大整数求和:TestBigIntegerAdd.h

 //测试顺序线性表之大整数求和
#include<iostream>
//引入顺序表之大整数求和头文件
#include"BigIntegerAdd.h"
using namespace std;
int main()
{
  //定义两个顺序线性表
  int array1[] = { , , , , , , , , };
  int array2[] = { , , , , , , , };
  SeqList<int>a = SeqList<int>(array1,);
  cout << "第一个大整数是:" << endl;
  a.PrintSeqList();
  SeqList<int>b = SeqList<int>(array2,);
  cout << "第二个大整数是:" << endl;
  b.PrintSeqList();
  SeqList<int>c = Add(a, b);
  cout << "他们的和是:" << endl;
  c.PrintSeqList();
  return ;
}

四、运行示例结果

顺序线性表之大整数求和C++实现的更多相关文章

  1. 顺序线性表之大整数求和C++

    顺序线性表之大整数求和 大整数求和伪代码 1.初始化进位标志 flag=0: 2.求大整数 A 和 B 的长度: int aLength = a.GetLength(); int bLength = ...

  2. 线性表&顺序线性表

    第二章 线性表 参考文献:[数据结构(C语言版)].严蔚敏 本篇章仅为个人学习数据结构的笔记,不做任何用途. 2.1 线性结构的特点 (1). 存在唯一的一个被称为"第一个"的数据 ...

  3. 顺序线性表 ---- ArrayList 源码解析及实现原理分析

    原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7738888.html ------------------------------------ ...

  4. C语言数据结构-顺序线性表的实现-初始化、销毁、长度、查找、前驱、后继、插入、删除、显示操作

    1.数据结构-顺序线性表的实现-C语言 #define MAXSIZE 100 //结构体定义 typedef struct { int *elem; //基地址 int length; //结构体当 ...

  5. 动态分配的顺序线性表的十五种操作—C语言实现

    线性表 定义:是最常用的,也是最简单的数据结构,是长度为n个数据元素的有序的序列. 含有大量记录的线性表叫文件 记录:稍微复杂的线性表里,数据元素为若干个数据项组成,这时把一个数据元素叫记录 结构特点 ...

  6. php 顺序线性表

    <?php /* * 线性顺序表 ,其是按照顺序在内存进行存储,出起始和结尾以外都是一一连接的(一般都是用一维数组的形式表现) * * GetElem: 返回线性表中第$index个数据元素 * ...

  7. 数据结构 - 静态顺序线性表的实行(C语言)

    数据结构 - 静态顺序线性表的实行(C语言) 1 获取元素操作 对于线性表的顺序存储结构来说,如果我们要实现GetElem操作,即将线性表L中的第i个位置元素值返回,其实是非常简单的. 只要i的数值在 ...

  8. C算法与数据结构-线性表的应用,多项式求和---ShinePans

    /*---上机作业作业,二项式加法---*/ /*---By 潘尚 ---*/ /*---日期: 2014-5-8 . ---*/ /*---题目:---*/ //如果有两个稀疏多项式A和B,设计算法 ...

  9. C语言实现顺序表的基本操作(从键盘输入 生成线性表,读txt文件生成线性表和数组生成线性表----三种写法)

    经过三天的时间终于把顺序表的操作实现搞定了.(主要是在测试部分停留了太长时间) 1. 线性表顺序存储的概念:指的是在内存中用一段地址连续的存储单元依次存储线性表中的元素. 2. 采用的实现方式:一段地 ...

随机推荐

  1. 苹果手机浏览器$(document).on(“click”,function(){})点击无效的问题

    <label class="js_highlight" style="display: inline-block;float: left;width: 50%;&q ...

  2. msfpayload反弹shell

    1.前期-- 情景就是当我们获得webshell时,我们想留下我们的后门,这个时候我们可以用到msfpayload与msfconsole结合使用 启动PostgreSQL服务:service post ...

  3. 在jsp中接收并处理servlet传过来的含有bean的List

    在jsp中接收并处理servlet传过来的含有bean的List 例如有以下bean package com.test.domain; class Student{ private Stirng na ...

  4. Oracle Certified Java Programmer 经典题目分析(二)

    ...接上篇 what is reserved(保留) words in java? A. run B. default C. implement D. import Java 关键字列表 (依字母排 ...

  5. 聊天室(上篇)GatewayWorker 基础

    前言 本文的目的是基于 GatewayWorker 官方手册,梳理一次 GatewayWorker,并在实践中与 MVC 框架整合的思路(附最终的项目源码).如果你已经理解了整合这一块儿的知识,那么就 ...

  6. 【内核】几个重要的linux内核文件【转】

    转自:http://www.cnblogs.com/lcw/p/3159394.html Preface 当用户编译一个linux内核代码后,会产生几个文件:vmlinz.initrd.img, 以及 ...

  7. 管道和xargs区别

    一直弄不懂,管道不就是把前一个命令的结果作为参数给下一个命令吗,那在 | 后面加不加xargs有什么区别 NewUserFF 写道: 懒蜗牛Gentoo 写道: 管道是实现“将前面的标准输出作为后面的 ...

  8. Python和MySQL数据库交互PyMySQL

    Python数据库操作 对于关系型数据库的访问,Python社区已经指定了一个标准,称为Python Database API SepcificationV2.0.MySQL.Qracle等特定数据库 ...

  9. 洛谷P3366最小生成树

    传送门啦 #include <iostream> #include <cstdio> #include <cstring> #include <algorit ...

  10. 20155225 实验四《Android程序设计》实验报告

    20155225 实验四<Android程序设计>实验报告 一.安装Android Stuidio 问题一:安装完成后,打开提示我找不到SDK,我已经设置了环境变量,关掉提示,没有影响. ...