数据结构课程设计长整数四则运算.docx

数据结构课程设计长整数四则运算.docx

ID:52835397

大小:36.37 KB

页数:6页

时间:2020-03-30

数据结构课程设计长整数四则运算.docx_第1页
数据结构课程设计长整数四则运算.docx_第2页
数据结构课程设计长整数四则运算.docx_第3页
数据结构课程设计长整数四则运算.docx_第4页
数据结构课程设计长整数四则运算.docx_第5页
资源描述:

《数据结构课程设计长整数四则运算.docx》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、数据结构课程设计题目:长整数四则运算班级学号学生姓名提交日期成绩计算机与通信工程学院长整数四则运算一需求分析:问题描述:设计一个实现任意长的整数进行加法运算的演示程序。基本要求:利用双向循环链表实现长整数的存储,每个结点含一个整形变量。任何整形变量的范围是-(2^15-1)~(2^15-1)。输入和输出形式:按中国对于长整数的表示习惯,每四位一组,组间用逗号隔开。在现实生活中有很多地方,例如航空航海、生物医疗等等方面,都需要很大的数来表示,这些用int甚至长整型longlong都是远不够的,所以需要有一种算法来解决这种大数的表示和运算。该问题只要求了大数的相

2、加运算。二详细设计:大致思路:【存储】用两个链表,每个节点保存一位数,在链表头保存数的正负,正数保存1,负数保存-1,如果是正数,后面每一位都储存正数,负数每一位都储存负数,数字按照链表头到链表尾从高位到低位的顺序;【相加】从两个链表的尾部开始同步向前相加,加完存到第一个链表,第二个加完的结点销毁,会存在两个链表不一样长的情况,没加的直接连到链表的前面,最高位的符号存到链表的头;【调整】根据表头的符号,调整后面的数字的值,中间会产生进位或者退位的问题,各个节点的符号不一定相同,但对于正负数都可以建立同样的调整模式,将正负到tmp中(1或-1)加或者减(tmp

3、*10),然后对前一位加或者减tmp*1即可。第一位保留符号不变,这样不用处理多余的进位,也就不用再产生新的节点,也不用保存符号。【输出】从前到后遍历已经处理好的表,将每一位进行输出就可以了。结构体定义structNode{Node*pre;Node*next;intdata;};功能函数voidInput(Node*p,Node*t)//处理输入和保存voiddisply(Node*h,Node*t,intl)//输出voidadd(Node*h1,Node*t1,Node*h2,Node*t2)//每一位相加intadjust(Node*h,Node*t

4、)//将各个位的正负、大小、进位进行调整源程序:#include#include#includeusingnamespacestd;structNode{Node*pre;Node*next;intdata;};voidInput(Node*p,Node*t){Node*cur;stringstr;inttmp=1;charnum;cin>>str;if(str[0]=='-'){p->data=-1;tmp=-1;}else{p->data=1;cur=newNode;cur->data=str[0]

5、-'0';cur->pre=p;cur->next=t;t->pre=cur;p->next=cur;p=cur;}for(inti=1;str[i]!='';i++){if(str[i]==',')continue;cur=newNode;cur->data=(str[i]-'0')*tmp;cur->pre=p;cur->next=t;t->pre=cur;p->next=cur;p=cur;}}voiddisply(Node*h,Node*t,intl){Node*p;p=h;p=h->next;while(p->data==0&&p->next!

6、=t){p=p->next;l--;}while(p!=t){cout<data;p=p->next;l--;if(l%4==0&&l!=0)cout<<',';if(l==0)cout<pre,*p2=t2->pre;while(p1!=h1&&p2!=h2){p1->data=p1->data+p2->data;p1=p1->pre;p2=p2->pre;delete(p2->next);}if(p2!=h2){p2->nex

7、t=h1->next;h1->next->pre=p2;h1->next=h2->next;h2->next->pre=h1;}if(h1->next->data>=0)h1->data=1;elseh1->data=-1;}intadjust(Node*h,Node*t){intl=0,tmp=h->data;Node*p=t->pre;while(p!=h->next){if(p->data*tmp>0){if(p->data>9

8、

9、p->data<-9){p->data-=(tmp*10);p->pre->data+=tmp;}}if(p->data*

10、tmp<0){if(p->data<10

11、

12、p->d

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。