长整数的四则运算

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程名称: 《数据结构》课程设计课程设计题目: 长整数的四则运算

姓名:

院系: 计算机学院

专业:计算机科学与技术

年级:

学号:

指导教师:

2014 年月日

目录

1 课程设计的目的 (3)

2 需求分析 (3)

3 课程设计报告内容 (3)

3.1概要设计 (3)

3.2详细设计 (3)

3.3调试分析 (3)

3.4用户手册 (4)

3.5测试结果 (4)

3.6程序清单 (5)

4 小结 (x)

5 参考文献 (8)

1.课程设计的目的

(1) 熟练使用 C 语言编写程序,解决实际问题;

(2) 了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;

(3) 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;

(4) 提高综合运用所学的理论知识和方法独立分析和解决问题的能力;

2.需求分析

问题描述:设计一个实现任意长的整数进行加法运算的演示程序。基本要求:利用双向循环链表实现长整数的存储,每个结点含一个整形变量。任何整形变量的范围是 -215 - 1 215 - 1。输入和输出形式:按中国对于长整数的表示习惯,每四位一组,组间用逗号隔开。测试数据:(1)0;0;应输出“0”。

(2)-23456789;-76543211;应输出“-100000000”。(3)-99999999;1000000000000;应输出“999(4)100010001;-100010001;应输出“0”。(5)100010001;-100010000;应输出“1”。(6)-999999999999;-999999999999;应输出“1999999999998”。

(7)1000099999999;1;应输出“1000100000000”。

实现提示:(1)每个结点中可以存放的最大整数为 32767,才能保证两数相加不会溢出,但若这样存放,即相当于按 32768 进制存放,在十进制与 32768 进制数之间的转换十分不方便,故可以在每个结点中仅存十进制的 4 位,即不超过 9999 的非负整数,整个链表表示为万进制。(2)可以利用头结点数据域的符号代表长整数的符号。用其绝对值表示元素结点数目。相加过程中不要破坏两个操作数链表。不能给长整数位数规定上限。

3.1概要设计

利用双向循环链表现实长整数的存储,每个结点含一个整形变量。输入的形式以回车结束,可以直接输入正数或负数。按中国对于长整数的表示习惯,每四位一组,除数字和位于首位置的负号外,其它一切字符都将作为分隔符,连续多个分隔符当一个处理,但不使用分隔符也不影响结果。

3.3调试分析

测试数据,测试输出的结果,时间复杂度分析,和每个模块设计和调试时存在问题的思考(问题是哪些?问题如何解决?),算法的改进设想。

3.4用户手册(略)

3.5测试结果(略)

4总结

长整数用双向循环队列的数据结构,用的比较少,查阅不少资料

5、程序清单:(见附录)

#include

#include

#include

#include

using namespace std;

struct LinkNode

{

int data; //记录每个节点的整数(小于10000)LinkNode *next; //记录下一个节点的地址

LinkNode *pre; //记录前一个节点的地址

};

class LinkList

{

private:

LinkNode *head0,*head1; //head0,head1分别记录两个整数链表的

头指针

LinkNode *currptr;

LinkNode *result; //result记录结果链表的头指针

public:

LinkList(); //构造函数,初始化链表

~LinkList(); //析构函数,释放空间

void Creat(string a); //引入字符串,创立两个链表,分别表示两个整数

void Add(); //实现两个整数相加

void Display(); //显示结果

void addtwo();

//节点多的作为被加数,少的作为加数,实现整数绝对值大的加小的

};

int sum(int n);

LinkList::LinkList() //构造函数,初始化链表

{

head0=new LinkNode;

//申请一个空间记录整数的符号和节点数

head1=new LinkNode;

head0->next=head0;

head0->pre=head0; //初始化链表,建立双向循环链表

head1->next=head1;

head1->pre=head1;

result=new LinkNode;

result->next=result;

result->pre=result;

currptr=NULL;

}

LinkList::~LinkList() //析构函数,释放空间{

LinkNode *p1=head0,*p2=head1,*p3=result;

//三个指针分别指向三条链表的头指针

while(p1!=p1->pre)

{

p1->pre->next=p1->next;

p1->next->pre=p1->pre;

currptr=p1;

p1=p1->next;

delete currptr;

}

while(p2!=p2->pre) //逐个删除节点,释放空间{

p2->pre->next=p2->next;

相关文档
最新文档