2022年c++实现任意长整数的四则运算 .pdf

上传人:Che****ry 文档编号:34878908 上传时间:2022-08-19 格式:PDF 页数:13 大小:221.14KB
返回 下载 相关 举报
2022年c++实现任意长整数的四则运算 .pdf_第1页
第1页 / 共13页
2022年c++实现任意长整数的四则运算 .pdf_第2页
第2页 / 共13页
点击查看更多>>
资源描述

《2022年c++实现任意长整数的四则运算 .pdf》由会员分享,可在线阅读,更多相关《2022年c++实现任意长整数的四则运算 .pdf(13页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、实验题目:设计一数据结构可处理任意长度的整数概要设计1.数据结构的定义采用双向链表存储任意长整数。双向链表的定义如下:class DblList private: DblNode *head, *tail; DblNode *current; int sign; public: DblList(); /构造函数DblList(); /析构函数bool CreatList(string); /生成一个双向链表,存储整数int GetCount(); /获取整数的长度void Insert(DblNode *); /从表尾插入一个结点void InsertFront(DblNode *); /从表

2、头插入void Clear(); /清除该链表void operator+(DblList &); /实现两个任意整数的加法void operator*(DblList &); /实现两个任意整数的乘法DblList & operator=(DblList &); /重载赋值运算符int Compare(DblList &); /两个整数的绝对值比较void Display(); /任意长度整数的标准化输出;说明: 数据的存储,无外乎顺序或者链表。顺序存储时,定义数组无法实现任意长度,而且需要预设一个maxsize,不是特别的方便。所以采用链式存储方式。而且任意长数据通过字符串输入。在链表的每

3、一个结点中, 数据域是在该数位上的数字大小。2主要功能模块的功能任意长整数的输入任意长整数的标准化输出两个整数的加法两个整数的乘法三详细设计(主模块流程图)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 13 页 - - - - - - - - - 五、 使用说明及测试结果1. 使用说明:点击打开应用程序pro1.exe 。依次输入任意两个整数 (例如 123456,+1234567) ,按回车,会出现菜单,如下图:名师资料总结 - - -精品资料欢迎下载 - - - -

4、 - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 13 页 - - - - - - - - - 按1则实现两整数的加法按2则实现两整数的乘法按#结束注:菜单可重复出现直至#退出。实现加法,乘法如下图:2.测试结果:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 13 页 - - - - - - - - - (1) 123456 (2) +1234567 (3) -987654321 (4) 12a3 (5)

5、 + 注:当输入错误时,允许重新输入。六、 源程序/* 主函数*/ /*/ #include cal.h void main() string s; string p; DblList list1; while(1) /输入错误时,允许重新输入coutInput num1s; bool ok1=list1.CreatList(s); if (!ok1) couterror!endl; else coutnum1:; list1.Display(); break; DblList list2; while(1) coutInput num2:p; bool ok2=list2.CreatList

6、(p); if (!ok2) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 13 页 - - - - - - - - - couterror!endl; else coutnum2:; list2.Display(); break; string choose; while (1) cout 请选择运算法:endl; cout-endl; /*菜单 */ cout|1.num1+num2 |endl; /*可以重复输入运算符,按#退出 */ cout|2.num1*nu

7、m2 |endl; cout|#.exit |endl; cout-choose; if (choose=1) list1+list2; break; else if (choose=2) list1*list2; break; else if (choose=#) return; else cout输入有误,请重新输入!endl; continue; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 13 页 - - - - - - - - - /*头文件,包括长整数数据

8、结构的定义,成员函数的定义*/ /*/ #include #include #include using namespace std; struct DblNode int data; DblNode * prior; DblNode * next; ; bool IsNum(char a) /判断字符a 是否是便是数字int s=a-0; if(s=0&s=1&snext=NULL; head-prior=NULL; tail=head; current=NULL; sign=0; DblList:DblList() /析构函数while (head-next!=NULL) current=

9、head-next; head-next=current-next; delete current; current=NULL; sign=0; delete head; head=NULL; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 13 页 - - - - - - - - - tail=NULL; int DblList:GetCount() /返回该数字的长度(不包括符号位)current=head-next; int count=0; while (curr

10、ent) count+; current=current-next; current=NULL; return count; void DblList:Insert(DblNode *p) /从链表尾部插入一个结点tail-next=p; p-prior=tail; tail=p; void DblList:InsertFront(DblNode *q) /从链表头部插入一个结点if (head-next=NULL) head-next=q; q-prior=head; tail=q; else q-next=head-next; head-next-prior=q; head-next=q;

11、 q-prior=head; bool DblList:CreatList(string s) /输入的任意长度的表示数字的字符串bool j=IsInt(s); /以此生成双向链表if (!j) return j; else int i=0; sign=JudSign(s); if (s0=+|s0=-) i+; while (si!=0) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 13 页 - - - - - - - - - int ia=CtoI(si); c

12、urrent=new DblNode(); current-data=ia; current-next=NULL; current-prior=NULL; Insert(current); i+; current=NULL; return true; void DblList:Clear() while (head-next) current=head-next; head-next=current-next; delete current; tail=head; sign=0; current=NULL; int DblList:Compare(DblList & s) /任意两个长度数字绝

13、对值比较int a=GetCount(); int b=s.GetCount(); if (ab) return 1; else if (anext; s.current=s.head-next; while (current!=NULL) int re=current-data-s.current-data; if (re0) return 1; else if (renext; s.current=s.current-next; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9

14、 页,共 13 页 - - - - - - - - - current=NULL; s.current=NULL; return 0; DblList & DblList:operator =(DblList &s) Clear(); sign=s.sign; s.current=s.head-next; while (s.current!=NULL) current=new DblNode(); current-data=s.current-data; Insert(current); s.current=s.current-next; s.current=NULL; current=NUL

15、L; return *this; void DblList:operator +(DblList & s) /实现加法(包括减法)DblList temp; int da; int f=0; int si=Compare(s); if (si=0&(sign+s.sign=0) temp.sign=0; else if (si=0) temp.sign=sign; else if(si0) temp.sign=sign; else temp.sign=s.sign; current=tail; s.current=s.tail; while (1) if (current=head&s.cur

16、rent=s.head) if (f) da=f; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 13 页 - - - - - - - - - temp.current=new DblNode(); temp.current-data=f; temp.InsertFront(temp.current); if (!f) break; f=0; else if (current!=head&s.current=s.head) temp.current=new DblNo

17、de(); temp.current-data=current-data+f; temp.InsertFront(temp.current); current=current-prior; f=0; else if (current=head&s.current!=s.head) temp.current=new DblNode(); temp.current-data=s.current-data+f; temp.InsertFront(temp.current); s.current=s.current-prior; f=0; else da=current-data*sign+s.cur

18、rent-data*s.sign+f; if (da*temp.sign=10) da=da-10*temp.sign; f=temp.sign; else if (da*temp.signnext=NULL; temp.current-data=abs(da); temp.InsertFront(temp.current); current=current-prior; s.current=s.current-prior; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,

19、共 13 页 - - - - - - - - - current=NULL; s.current=NULL; temp.current=temp.head-next; if (temp.current!=NULL) while (temp.current-data=0) temp.head-next=temp.current-next; delete temp.current; temp.current=temp.head-next; temp.current=NULL; coutnum1+num2=; temp.Display(); void DblList:operator*(DblLis

20、t & s) /实现乘法int cf=0; int ans; int i,j; int count=0; DblList temp; temp.sign=sign*s.sign; int a1=GetCount(); int a2=s.GetCount(); int a=a1+a2; for (i=0;idata=0; temp.current-next=NULL; temp.current-prior=NULL; temp.InsertFront(temp.current); s.current=s.tail; while (s.current!=s.head) current=tail;

21、temp.current=temp.tail; for (i=0;iprior; for(j=0;jdata*current-data+temp.current-data+cf; temp.current-data=ans%10; cf=ans/10; current=current-prior; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 13 页 - - - - - - - - - temp.current=temp.current-prior; if (cf!

22、=0) temp.current-data=temp.current-data+cf; cf=0; s.current=s.current-prior; temp.current=temp.tail; count+; if(temp.head-next-data=0) temp.current=temp.head-next; temp.head-next=temp.current-next; delete temp.current; temp.current=NULL; coutnum1*num2=; temp.Display(); void DblList:Display() /任意长数字的

23、标准化输出int count=GetCount(); if (sign=0) cout0endl; return ; else if (sign=-1) coutnext; while (current!=NULL) if(count0) coutdata; count-; if (count%3=0&count!=0) coutnext; current=NULL; coutendl; cout-endl; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 13 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁