欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    c++实现任意长整数的四则运算(共13页).doc

    • 资源ID:14115083       资源大小:116.50KB        全文页数:13页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    c++实现任意长整数的四则运算(共13页).doc

    精选优质文档-倾情为你奉上实验题目:设计一数据结构可处理任意长度的整数 概要设计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 *); /从表头插入void Clear(); /清除该链表void operator+(DblList &); /实现两个任意整数的加法void operator*(DblList &); /实现两个任意整数的乘法DblList & operator=(DblList &); /重载赋值运算符 int Compare(DblList &); /两个整数的绝对值比较 void Display(); /任意长度整数的标准化输出;说明:数据的存储,无外乎顺序或者链表。顺序存储时,定义数组无法实现任意长度,而且需要预设一个maxsize,不是特别的方便。所以采用链式存储方式。而且任意长数据通过字符串输入。在链表的每一个结点中,数据域是在该数位上的数字大小。2 主要功能模块的功能u 任意长整数的输入u 任意长整数的标准化输出u 两个整数的加法u 两个整数的乘法三详细设计(主模块流程图)五、 使用说明及测试结果1.使用说明:点击打开应用程序pro1.exe。依次输入任意两个整数(例如,+),按回车,会出现菜单,如下图:按1则实现两整数的加法按2则实现两整数的乘法按#结束注:菜单可重复出现直至#退出。实现加法,乘法如下图:2.测试结果:(1) (2) + (3) - (4) 12a3 (5) + 注:当输入错误时,允许重新输入。六、 源程序/* 主函数 */*/#include "cal.h"void main()string s; string p; DblList list1;while(1) /输入错误时,允许重新输入 cout<<"Input num1"<<endl; cin>>s; bool ok1=list1.CreatList(s);if (!ok1) cout<<"error!"<<endl;elsecout<<"num1:"list1.Display();break;DblList list2;while(1)cout<<"Input num2:"<<endl;cin>>p; bool ok2=list2.CreatList(p);if (!ok2)cout<<"error!"<<endl;elsecout<<"num2:"list2.Display();break;string choose;while (1) cout<<"请选择运算法:"<<endl;cout<<"-"<<endl; /*菜单*/cout<<"|1.num1+num2 |"<<endl; /*可以重复输入运算符,按'#'退出*/cout<<"|2.num1*num2 |"<<endl;cout<<"|#.exit |"<<endl;cout<<"-"<<endl;while (1) cin>>choose; if (choose="1") list1+list2;break; else if (choose="2") list1*list2;break; else if (choose="#") return; else cout<<"输入有误,请重新输入!"<<endl;continue;/*头文件,包括长整数数据结构的定义,成员函数的定义*/*/#include <iostream>#include <string>#include <cmath>using namespace std;struct DblNodeint data; DblNode * prior;DblNode * next;bool IsNum(char a) /判断字符a是否是便是数字 int s=a-'0'if(s>=0&&s<10)return true;else return false;bool IsInt(string a) /判断字符串a是否表达一串数字bool Jud=1;int i=1;char s=a0;if (a="+"|a="-") return false;if (s='+'|s='-')else if (s>='1'&&s<='9')else if(a0='0'&&a1='0') return true;else return false;while (ai!='0')Jud=IsNum(ai);if (Jud=0) return false;i+;return true;int JudSign(string s) /返回数字的符号if (s0='-') return -1;else if(s0='0'&&s1='0') return 0;else return 1;int CtoI(char a)int i=a-'0'return i;class DblList /定义一个双向链表类,存储任意长度的数字private: /并可以进行标准化输出和加法,乘法。DblNode *head, *tail; DblNode *current;int sign;public:DblList(); /构造函数 DblList(); /析构函数bool CreatList(string); /生成一个双向链表int GetCount(); /获取整数的长度void Insert(DblNode *); /从表尾插入一个结点 void InsertFront(DblNode *); /从表头插入一个结点void Clear(); /清除该链表void operator+(DblList &); /实现两个任意整数的加法void operator*(DblList &); /实现两个任意整数的乘法DblList & operator=(DblList &); /重载赋值运算符 int Compare(DblList &); /两个整数的绝对值比较void Display(); /任意长度整数的标准化输出;DblList:DblList() head=new DblNode(); /构造函数head->next=NULL;head->prior=NULL; tail=head;current=NULL;sign=0;DblList:DblList() /析构函数while (head->next!=NULL) current=head->next;head->next=current->next;delete current;current=NULL;sign=0;delete head;head=NULL;tail=NULL;int DblList:GetCount() /返回该数字的长度(不包括符号位) current=head->next;int count=0;while (current)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;elseq->next=head->next;head->next->prior=q;head->next=q;q->prior=head;bool DblList:CreatList(string s) /输入的任意长度的表示数字的字符串 bool j=IsInt(s); /以此生成双向链表if (!j) return j;elseint i=0;sign=JudSign(s);if (s0='+'|s0='-')i+;while (si!='0')int ia=CtoI(si);current=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) /任意两个长度数字绝对值比较int a=GetCount();int b=s.GetCount();if (a>b) return 1;else if (a<b) return -1;else current=head->next;s.current=s.head->next;while (current!=NULL)int re=current->data-s.current->data;if (re>0)return 1;else if (re<0) return -1;elsecurrent=current->next; s.current=s.current->next;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=NULL;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(si>0) temp.sign=sign; else temp.sign=s.sign; current=tail; s.current=s.tail; while (1)if (current=head&&s.current=s.head) if (f) da=f; 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 DblNode(); 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; elseda=current->data*sign+s.current->data*s.sign+f;if (da*temp.sign>=10)da=da-10*temp.sign;f=temp.sign;else if (da*temp.sign<0)da=da+10*temp.sign;f=-temp.sign;else f=0; temp.current=new DblNode();temp.current->next=NULL;temp.current->data=abs(da);temp.InsertFront(temp.current);current=current->prior;s.current=s.current->prior;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;cout<<"num1+num2="temp.Display(); void DblList:operator*(DblList & 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;i<a;i+) temp.current=new DblNode();temp.current->data=0;temp.current->next=NULL;temp.current->prior=NULL;temp.InsertFront(temp.current); s.current=s.tail;while (s.current!=s.head)current=tail;temp.current=temp.tail;for (i=0;i<count;i+) temp.current=temp.current->prior;for(j=0;j<a1;j+) ans=s.current->data*current->data+temp.current->data+cf; temp.current->data=ans%10; cf=ans/10;current=current->prior;temp.current=temp.current->prior;if (cf!=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;cout<<"num1*num2=" temp.Display();void DblList:Display() /任意长数字的标准化输出int count=GetCount();if (sign=0)cout<<"0"<<endl;return ;else if (sign=-1)cout<<"-"current=head->next;while (current!=NULL) if(count>0)cout<<current->data; count-;if (count%3=0&&count!=0) cout<<"," current=current->next;current=NULL;cout<<endl;cout<<"-"<<endl;专心-专注-专业

    注意事项

    本文(c++实现任意长整数的四则运算(共13页).doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

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

    收起
    展开