版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、高级语言程序设计作业报告作业名称: 大整数相加减 学 院 计算机科学与工程学院 专 业 计算机软件 学生姓名 awell 任课教师 xxx 提交日期 1、 问题描述 实现两个大整数的相加减二、系统设计 1、结构说明建立结构类型 node:struct nodeint num;/每个位数用一个int类型表示,其中num>=0&&num<=9;node * next;/建立单向链表,连接相邻的数字;; 2、函数说明建立链表(将输入的两个数中较大的保存在fir表头的链表中):void creatlist()bool falg=false;/标记输入的两个整数是否需要进行互
2、换;if(arr1.size()-falg1>arr2.size()-falg2)/falg1表示输入的第一个整数前面的符号;falg=true;if(arr2.size()-falg2=arr1.size()-falg1)for(int i=0;i<arr2.size()-falg2;i+)if(opration='+') /如果是实现加法,不用管建链表时的整数互换falg=true;break;if(arr1i+falg1>arr2i+falg2) falg=true;break;if(i=arr1.size()-falg1-1) falg=false;i
3、f(falg)for(int i=arr1.size()-1;i>=falg1;i-)node *s;s=new node;s->num=arr1i-'0'/从输入的整数尾部逆向建立链表if(fir=NULL) fir=s;else efir->next=s;efir=s;efir->next=NULL;/尾结点的next一定要赋NULL,不然会出现错误for(int i=arr2.size()-1;i>=falg2;i-)node *s;s=new node;s->num=arr2i-'0'if(sec=NULL) sec=
4、s;else esec->next=s;esec=s;esec->next=NULL;elsefor(int i=arr2.size()-1;i>=falg2;i-)node *s;s=new node;s->num=arr2i-'0'if(fir=NULL) fir=s;else efir->next=s;efir=s;efir->next=NULL;for(int i=arr1.size()-1;i>=falg1;i-)node *s;s=new node;s->num=arr1i-'0'if(sec=NULL
5、) sec=s;else esec->next=s;esec=s;esec->next=NULL;if(opration='+') return;if(!falg) f=!f;/f表示整个运算结果的正负void add()/实现加法bool falg=false;/标记是否进位int num2=sec->num;for(node *head1=fir,*head2=sec;head1;head1=head1->next)/因为以fir为表头建立的链表所保存的整数较大,所以,以sec为表头建立的链表会先或者同时遍历到表位int num1=head1->
6、;num;head1->num=(falg+num1+num2)%10;falg=(falg+num1+num2)/10;if(head2->next) /判断以sec为表头的链表是否达到表尾head2=head2->next;num2=head2->num;else num2=0;if(f) cout<<"-"if(falg) cout<<1;int i=0;char *ans=new charsizeof(arr1)+sizeof(arr2);for(node *head1=fir;head1;head1=head1-&g
7、t;next)ansi=head1->num+'0'i+;for(i-;i>=0;i-)cout<<ansi;void sub()/实现两整数相减int num2=sec->num;bool falg=false;/判是否退位for(node *head1=fir,*head2=sec;head1;head1=head1->next)int num1=head1->num;head1->num=num1-num2-falg;if(num1-falg-num2<0)falg=true;head1->num=head1-&
8、gt;num+10;else falg=false;if(head2->next)head2=head2->next;num2=head2->num;else num2=0;int i=0;char *ans=new charsizeof(arr1)+sizeof(arr2);for(node *head1=fir;head1;head1=head1->next)ansi=head1->num+'0'i+;i-;falg=false;for(int j=0;j<=i;j+)if(ansj!='0') break;if(j=i)
9、falg=true;cout<<0;return;if(f) cout<<"-"if(ansi='0') i-;for(;i>=0;i-)cout<<ansi;void dele()/回收内存node *tem;for(;fir;)tem=fir;fir=fir->next;delete tem;for(;sec;)tem=sec;开始sec=sec->next;delete tem;tem=fir=efir=sec=esec=NULL;输入式子判操作程序流程图实现加法实现减法输出结果结束三、程序测试 1
10、、设计测试用例0 + 01 + 110 + 11 + 10-1 + 11 + -1-10 + 100100 + -1010 - 101 - 1010 - 11 - 77 - 155555555555555555555555555555555555555555 - 555555555555555555555555555555555-10 - -10-11 - -1-1 - -15515-1 - -8-8 - -1-6666666666666666666666666666666666 - -6666666666666666666666666 2、程序测试结果0 + 0 = 01 + 1 = 210
11、 + 1 = 111 + 10 = 11-1 + 1 = 01 + -1 = 0-10 + 100 = 90100 + -10 = 9010 - 10 = 01 - 10 = -910 - 1 = 91 - 7 = -67 - 1 = 655555555555555555555555555555555555555555 - 555555555555555555555555555555555 = 55555555000000000000000000000000000000000-10 - -10 = 0-11 - -1 = -10-1 - -15515 = 15514-1 - -8 = 7-8
12、- -1 = -7-6666666666666666666666666666666666 - -6666666666666666666666666 = -6666666660000000000000000000000000四、使用说明 能正确实现两个大整数(包括正负)相加减的运算5、 收获体会及建议完整代码:#include <cstdio>#include <string>#include <cstring>#include <iostream>using namespace std;struct nodeint num;node * next
13、;bool f,falg1,falg2;string arr1,arr2;char opration;node *fir=NULL,*efir=NULL,*sec=NULL,*esec=NULL;void creatlist()bool falg=false;if(arr1.size()-falg1>arr2.size()-falg2)falg=true;if(arr2.size()-falg2=arr1.size()-falg1)for(int i=0;i<arr2.size()-falg2;i+)if(opration='+') falg=true;break;
14、if(arr1i+falg1>arr2i+falg2) falg=true;break;if(i=arr1.size()-falg1-1) falg=false;if(falg)for(int i=arr1.size()-1;i>=falg1;i-)node *s;s=new node;s->num=arr1i-'0'if(fir=NULL) fir=s;else efir->next=s;efir=s;efir->next=NULL;for(int i=arr2.size()-1;i>=falg2;i-)node *s;s=new node
15、;s->num=arr2i-'0'if(sec=NULL) sec=s;else esec->next=s;esec=s;esec->next=NULL;elsefor(int i=arr2.size()-1;i>=falg2;i-)node *s;s=new node;s->num=arr2i-'0'if(fir=NULL) fir=s;else efir->next=s;efir=s;efir->next=NULL;for(int i=arr1.size()-1;i>=falg1;i-)node *s;s=ne
16、w node;s->num=arr1i-'0'if(sec=NULL) sec=s;else esec->next=s;esec=s;esec->next=NULL;if(opration='+') return;if(!falg) f=!f;void add()bool falg=false;int num2=sec->num;for(node *head1=fir,*head2=sec;head1;head1=head1->next)int num1=head1->num;head1->num=(falg+num1+
17、num2)%10;falg=(falg+num1+num2)/10;if(head2->next) head2=head2->next;num2=head2->num;else num2=0;if(f) cout<<"-"if(falg) cout<<1;int i=0;char *ans=new charsizeof(arr1)+sizeof(arr2);for(node *head1=fir;head1;head1=head1->next)ansi=head1->num+'0'i+;for(i-;i&
18、gt;=0;i-)cout<<ansi;void sub()int num2=sec->num;bool falg=false;for(node *head1=fir,*head2=sec;head1;head1=head1->next)int num1=head1->num;head1->num=num1-num2-falg;if(num1-falg-num2<0)falg=true;head1->num=head1->num+10;else falg=false;if(head2->next)head2=head2->nex
19、t;num2=head2->num;else num2=0;int i=0;char *ans=new charsizeof(arr1)+sizeof(arr2);for(node *head1=fir;head1;head1=head1->next)ansi=head1->num+'0'i+;i-;falg=false;for(int j=0;j<=i;j+)if(ansj!='0') break;if(j=i)falg=true;cout<<0;return;if(f) cout<<"-"if(ansi='0') i-;for(;i>=0;i-)cout<<ansi;void dele()/回收内存node *tem;for(;fir;)tem=fir;fir=fir->next;delete tem;for(;sec;)tem=sec;sec=sec->next;delete tem;tem=fir=efir=sec=esec=NULL;int main() cout<<"输入算式,形如:"<<endl;cout<<"a + b o
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 石河子大学《智慧水利》2022-2023学年第一学期期末试卷
- 石河子大学《外国文学一》2021-2022学年第一学期期末试卷
- 石河子大学《化工仪表及自动化》2023-2024学年第一学期期末试卷
- 沈阳理工大学《展示空间设计》2022-2023学年第一学期期末试卷
- 沈阳理工大学《汽车理论》2023-2024学年第一学期期末试卷
- 沈阳理工大学《工控组态软件及应用》2022-2023学年第一学期期末试卷
- 管道保温工程合同协议书
- 光明租赁合同
- 合同编司法解释27解读
- 2024肉类采购合同样本
- 关于每日英语短文朗读3篇 英语四级口语考试短文朗读范文
- 山西昔阳安顺乐安煤业有限公司矿山矿产资源开发利用、地质环境保护与土地复垦方案
- DB37-T 4612-2023 化妆品生产企业批生产记录通用管理规范
- 某金属公司套期保值案例
- 海康威视视频车位诱导与反向寻车系统与解决与方案
- 汽车维修工时定额单价标准
- 光伏发电工程施工组织设计
- 农村人居环境整治干净整洁村验收表
- 公文管理中的错误
- 2020年城市燃气服务企业组织结构及部门职责
- JJG 2023-1989压力计量器具
评论
0/150
提交评论