顺序线性表之大整数求和C++
顺序线性表之大整数求和
大整数求和伪代码
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 = 100;
//定义顺序表SeqList的模板类
template<class DataType>
class SeqList{
public:
//顺序表无参构造器(创建一个空的顺序表)
SeqList(){ length = 0; }
//顺序表有参构造器(创建一个长度为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 = 0; i < n; i++)
{
data[i] = array[i];
}
//给顺序表的长度赋值
length = n;
}
//实现顺序表按位查找
template<class DataType>
DataType SeqList<DataType>::GetElement(int i)
{
//判断是定的位置是否合理
if (i < 1 || i >length)
{
throw "位置有误";
}
else
{
//返回指定位置的元素
return data[i - 1];
}
}
//实现顺序表按值查找,返回该元素所在的位置
template<class DataType>
int SeqList<DataType>::GetLocal(DataType x)
{
//遍历顺序表的元素
for (int i = 0; i < length; i++)
{
//判断指定的元素是否在顺序表中
if (data[i] == x)
{
//返回指定元素在顺序表中的位置
return (i + 1);
}
}
//如果指定的元素不在顺序表中,则返回位置为0
return 0;
}
//实现顺序表插入元素
template<class DataType>
void SeqList<DataType>::Insert(int index, DataType x)
{
//判断插入的位置是否合理
if (length >= MaxSize)
{
throw "顺序表已存放满";
}
if (index<1 || index>length + 1)
{
throw "插入元素的位置有误";
}
//如何插入的位置合理,则把顺序表中从最后位置到指定插位置的元素整体向后移动一个位置
for (int j = length; j >= index; j--)
{
data[j] = data[j - 1];
}
//给插入的位置放入指定的元素
data[index - 1] = x;
length++;
}
//实现顺序表删除指定位置的元素
template<class DataType>
DataType SeqList<DataType>::Delete(int index)
{
//声明要取出的元素
DataType x;
//判断要删除的位置是否合理
if (index<1 || index>length)
{
throw "删除的位置有误";
}
else
{
//取出指定位置的元素
x = data[index - 1];
//将指定位置后的元素全部都向前移动一个位置
for (int i = index; i < length; i++)
{
data[i - 1] = data[i];
}
//删除顺序表中的元素后,其长度减1
length--;
}
return x;
}
//顺序输出顺序表中的元素
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;
}
顺序线性表之大整数求和C++的更多相关文章
- 顺序线性表之大整数求和C++实现
顺序线性表之大整数求和 大整数求和伪代码 1.初始化进位标志 flag=0: 2.求大整数 A 和 B 的长度: int aLength = a.GetLength(); int bLength = ...
- 线性表&顺序线性表
第二章 线性表 参考文献:[数据结构(C语言版)].严蔚敏 本篇章仅为个人学习数据结构的笔记,不做任何用途. 2.1 线性结构的特点 (1). 存在唯一的一个被称为"第一个"的数据 ...
- 顺序线性表 ---- ArrayList 源码解析及实现原理分析
原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7738888.html ------------------------------------ ...
- C语言数据结构-顺序线性表的实现-初始化、销毁、长度、查找、前驱、后继、插入、删除、显示操作
1.数据结构-顺序线性表的实现-C语言 #define MAXSIZE 100 //结构体定义 typedef struct { int *elem; //基地址 int length; //结构体当 ...
- 动态分配的顺序线性表的十五种操作—C语言实现
线性表 定义:是最常用的,也是最简单的数据结构,是长度为n个数据元素的有序的序列. 含有大量记录的线性表叫文件 记录:稍微复杂的线性表里,数据元素为若干个数据项组成,这时把一个数据元素叫记录 结构特点 ...
- php 顺序线性表
<?php /* * 线性顺序表 ,其是按照顺序在内存进行存储,出起始和结尾以外都是一一连接的(一般都是用一维数组的形式表现) * * GetElem: 返回线性表中第$index个数据元素 * ...
- 数据结构 - 静态顺序线性表的实行(C语言)
数据结构 - 静态顺序线性表的实行(C语言) 1 获取元素操作 对于线性表的顺序存储结构来说,如果我们要实现GetElem操作,即将线性表L中的第i个位置元素值返回,其实是非常简单的. 只要i的数值在 ...
- C算法与数据结构-线性表的应用,多项式求和---ShinePans
/*---上机作业作业,二项式加法---*/ /*---By 潘尚 ---*/ /*---日期: 2014-5-8 . ---*/ /*---题目:---*/ //如果有两个稀疏多项式A和B,设计算法 ...
- C语言实现顺序表的基本操作(从键盘输入 生成线性表,读txt文件生成线性表和数组生成线性表----三种写法)
经过三天的时间终于把顺序表的操作实现搞定了.(主要是在测试部分停留了太长时间) 1. 线性表顺序存储的概念:指的是在内存中用一段地址连续的存储单元依次存储线性表中的元素. 2. 采用的实现方式:一段地 ...
随机推荐
- 一个web应用的诞生(6)--用户账户
之前登录注册的功能都已经完成,但是登录成功回到首页发现还是白茫茫的一片,对的,title一直都写得博客,那么最终目的也是写出一个轻博客来,但是,在发表文章之前是不是要先记录一下登录状态呢? 用户登录 ...
- 在vi或者vim中显示行号
1. 为了显示行号,在vi/vim编辑器中执行一下命令中的一条 :set number 或者 :set nu 2. 为了关闭行号,在vi/vim编辑器中执行下面命令 :set nu! 如果你想要每次启 ...
- JS作用域理解
1.JS解析步骤: a.预解析 将变量声明提升: 将函数声明及函数内容提升,可以理解成原来位置的函数在解析代码时已经提到代码初始位置: 遇到重名,只留下一个: 如有重名变量和函数,留下函数: 如有两个 ...
- js设计模式--工厂模式
工厂模式: 工厂模式的目的是为了创建对象,它经常是在类和类的方法中实现.简单的工厂模式是由一个方法来决定到底要创建哪类的实例,这些实例经常拥有相同的接口,这种模式在所实例化的类型在编译期并不确定,而是 ...
- 架设WIN32汇编程序的开发环境
笔者在学习Windows下的图形界面应用程序(GUI,Graphical User Interface)的时候碰到的第一个麻烦就是架设WIN32汇编程序的开发环境,在这里笔者愿意和大家分享这段经历. ...
- 解决CSS中float:left后需要clear:both清空
现在,大部分的横排导航都是通过 ul -> li *n -> a 来实现的.具我所知,要达到这种效果,有几种方法可以实现. 1.传统处理方式: li {float:left;}/*这样,对 ...
- JLOI2015 解题报告
JLOI2015 真的不愧是NOI出题组出的,题目难度够吊.不过每一道都是结论题和乱搞题真的很不好玩... T1:[JLOI2015]有意义的字符串 首先贴下popoqqq的blog吧 感性的认识就是 ...
- 快看我解决了一个Nginx的小问题
前言 最近小编写项目的时候,需要用到Nginx服务器,对于Nginx正常安装就好了详情见[我是传送门],正当一切安好的时候问题来了,这台服务器的80端口竟然被占用了,什么鬼?怎么办,只有改端口.具体方 ...
- Laravel生命周期
如果你对一件工具的使用原理了如指掌,那么你在用这件工具的时候会充满信心! 一旦用户(浏览器)发送了一个HTTP请求,我们的apache或者nginx一般都转到index.php,因此,之后的一系列步骤 ...
- smarty模板基础1
smarty模板的作用可以让前端和后端分离(也就是前端的显示页面和后端的php代码). smarty模板的核心是一个类,下载好的模板中有这么几个重要的文件夹 (1)libs核心文件夹(2)int.in ...