ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:184.16KB ,
资源ID:1525181      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/1525181.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(长整数的四则运算_精品文档.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

长整数的四则运算_精品文档.docx

1、课程名称: 数据结构课程设计课程设计题目: 长整数的四则运算姓 名: 院系: 计算机学院专 业:计算机科学与技术 年 级: 学 号:指导教师: 2014 年月 日目 录 1 课程设计的目的32 需求分析3 3 课程设计报告内容3 3.1概要设计33.2详细设计3 3.3调试分析3 3.4用户手册4 3.5测试结果43.6程序清单5 4 小结 x 5 参考文献 81.课程设计的目的(1) 熟练使用 C 语言编写程序,解决实际问题;(2) 了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;(3) 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;(4) 提高

2、综合运用所学的理论知识和方法独立分析和解决问题的能力;2.需求分析问题描述:设计一个实现任意长的整数进行加法运算的演示程序。基本要求:利用双向循环链表实现长整数的存储,每个结点含一个整形变量。任何整形变量的范围是 -215 - 1 215 - 1。输入和输出形式:按中国对于长整数的表示习惯,每四位一组,组间用逗号隔开。测试数据:(1)0;0;应输出“0” 。(2)-23456789;-76543211;应输出“-100000000” 。(3)-99999999;1000000000000;应输出“999(4)100010001;-100010001;应输出“0”。(5)100010001;-1

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

4、表。不能给长整数位数规定上限。3.1概要设计利用双向循环链表现实长整数的存储,每个结点含一个整形变量。输入的形式以回车结束,可以直接输入正数或负数。按中国对于长整数的表示习惯,每四位一组,除数字和位于首位置的负号外,其它一切字符都将作为分隔符,连续多个分隔符当一个处理,但不使用分隔符也不影响结果。3.3调试分析测试数据,测试输出的结果,时间复杂度分析,和每个模块设计和调试时存在问题的思考(问题是哪些?问题如何解决?),算法的改进设想。3.4用户手册(略)3.5测试结果(略)4总结长整数用双向循环队列的数据结构,用的比较少,查阅不少资料5、程序清单:(见附录)#include#include#i

5、nclude#includeusing namespace std;struct LinkNodeint data; /记录每个节点的整数(小于10000)LinkNode *next; /记录下一个节点的地址LinkNode *pre; /记录前一个节点的地址;class LinkListprivate:LinkNode *head0,*head1; /head0,head1分别记录两个整数链表的头指针LinkNode *currptr;LinkNode *result; /result记录结果链表的头指针public:LinkList(); /构造函数,初始化链表LinkList(); /

6、析构函数,释放空间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-nex

7、t=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) /逐

8、个删除节点,释放空间 p2-pre-next=p2-next; p2-next-pre=p2-pre; currptr=p2; p2=p2-next; delete currptr;while(p3!=p3-pre) p3-pre-next=p3-next; p3-next-pre=p3-pre; currptr=p3; p3=p3-next; delete currptr;void LinkList:Creat(string a) /引入字符串,创立两个链表,分别表示两个整数int i=0,j=0,m=0,n=0,k=0,l=0,s=0,w=0;/i记录字符串,j记录加数节点数;s记录被加数

9、节点数 /w标记字符串中的-号 /k记录字符串中的字符转化为整数的值,l使每个节点记录4位while(am!=;) m+; /m记录字符串中被加数的字符数 n=m;while(an!=0) n+; /n记录字符串的总字符数if(a0=-) head0-data=(-1); /记录整数符号 w=1;else head0-data=1;for(i=m-1;i=w;i-) if(ai!=,) /把字符转化为整数 k+=(ai-0)*sum(l); l+; if(ai=,|i=w) currptr=new LinkNode; /把整数存到双向循环链表中 currptr-data=k; currptr-

10、next=head0; currptr-pre=head0-pre; head0-pre-next=currptr; head0-pre=currptr; head0=currptr; s+; /节点数加1 k=0; /重新初始化k和l l=0; head0-pre-data*=s; /存储整数符号和节点数/与建第一个整数链表一样,建立第二个整数链表head1k=0;l=0;if(am+1=-) head1-data=(-1); m+;else head1-data=1;for(i=n-1;im;i-) if(ai!=,) k+=(ai-0)*sum(l); l+; if(ai=,|i=m+1

11、) currptr=new LinkNode; currptr-data=k; currptr-next=head1; currptr-pre=head1-pre; head1-pre-next=currptr; head1-pre=currptr; head1=currptr; j+; k=0; l=0; head1-pre-data*=j;void LinkList:Add() /实现两个整数相加LinkNode *temp;if(abs(head0-pre-data)abs(head1-pre-data) /两个整数中,绝对值大的为被加数 addtwo();else if(abs(head0-pre-data)pre-data) temp=head0; head0=head1; h

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1