长整数,高精度大数加减运算课程报告(c++版)(附源代码)

长整数,高精度大数加减运算课程报告(c++版)(附源代码)

ID:43470741

大小:658.47 KB

页数:67页

时间:2019-10-04

长整数,高精度大数加减运算课程报告(c++版)(附源代码)_第1页
长整数,高精度大数加减运算课程报告(c++版)(附源代码)_第2页
长整数,高精度大数加减运算课程报告(c++版)(附源代码)_第3页
长整数,高精度大数加减运算课程报告(c++版)(附源代码)_第4页
长整数,高精度大数加减运算课程报告(c++版)(附源代码)_第5页
资源描述:

《长整数,高精度大数加减运算课程报告(c++版)(附源代码)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、华南理工大学计算机学院 网络工程Copyright©2013byCY.M.华南理工大学高级语言程序设计I大作业报告实验题目:长整数运算、高精度运算姓名:李超悦学号:201230610155班级:网络工程任课教师:郑运平实验概述【实验目的及要求】  设计一个程序实现两个任意长的整数(包括正数和负数)、任意精度实数的算术运算。要求:(1)用动态链表存贮数据,每个结点含一个整型变量,表示若干位数。(注:任何整型变量的范围是-(231-1)~(231-1),任意长整数的整型变量的范围是-(2n-1)~(2n-1),在计算机上都能有效地运行。

2、其中,n是由程序读入的参数控制的。)(2)整数输入和输出按中国对于长整数的习惯表示,每3位1组,组间用逗号隔开。(3)实现加、减运算。(4)程序运行界面清晰实用。【实验原理】大整数的存储结构:    大数计算的因数和结果精度一般是少则数十位,多则几万位。在C++语言中定义的类型中精度最多只有二十多位,因而我们采取用链表存贮的方式来存放大数。在计算中会用到从高位开始计算,和从低位开始计算数值的两种情况。所以我们将链表定义为双向链表,其中为一个单元来存贮数据,一个指针指向前方的数据,另一个指向后的数据。67华南理工大学计算机学院 网络工

3、程Copyright©2013byCY.M.程序的逻辑框图双向链表的初始化主函数输入任意长整数调用双向链表基本操作函数长整数求值及结果显示END【实验环境】 VS2012SP2,WIN8平台实验内容【实验方案设计】一、要求和规格的说明描述问题:设计一个程序实现两个任意长的整数(包括正数和负数)、任意精度实数的算术运算。要求:67华南理工大学计算机学院 网络工程Copyright©2013byCY.M.(1)用动态链表存贮数据,每个结点含一个整型变量,表示若干位数。(注:任何整型变量的范围是-(231-1)~(231-1),任意长整数

4、的整型变量的范围是-(2n-1)~(2n-1),在计算机上都能有效地运行。其中,n是由程序读入的参数控制的。)(2)整数输入和输出按中国对于长整数的习惯表示,每3位1组,组间用逗号隔开。(3)实现加、减运算。(4)程序运行界面清晰实用。二、设计1、设计思想:1)储结构:双向链表储存数据structlong_int//构建一个存储字符与地址的结构{charnum;long_int*pro,*next;};//在这里,用pro记录左链,用next记录右链原理:在C++语言中定义的类型中精度最多只有二十多位,因而我们采取用链表存贮的方式来

5、存放大数。在计算中会用到从高位开始计算,和从低位开始计算数值的两种情况。所以我们将链表定义为双向链表,其中为一个单元来存贮数据,一个指针指向前方的数据,另一个指向后的数据。2)主要算法思想。A加法:先从低位算起,因为只须要对应的位相加,再加上前一位的进位,再去判断是否本位是否有进位,有则把本位数字改为减去它的权,也就是10,再置进位为1。如果没有进位,则给进位赋值0。两个加数中那一个数的位数长,以位数长的作为循环变量;用ASCLL码值做判断;此处以一位为一储单元,实现进位,提高运算效率,再将数字三位一组加“,”,写入字符串,方便输出

6、代码实现://加法运算stringPlus(long_int*&num1,long_int*&num2,long_int*&num_1,long_int*&num_2,intsign)//运行加法运算{intn,i=0,k=0;//这里定义i为进位判断符号,k为间隔符判断符号long_int*s,*p,*q,*head=NULL;//在这里,head只能算是指向小数点的标志了if(num_1

7、

8、num_2){67华南理工大学计算机学院 网络工程Copyright©2013byCY.M.s=newlong_int;//存储小数点的链s

9、->num='.';head=s;p=s;while(num_1

10、

11、num_2){if(k!=0&&k%3==0)//k作为判断位数间隔,每3个位一个“,”{s=newlong_int;s->num=',';p->next=s;s->pro=p;p=s;}s=newlong_int;s->pro=p;if(num_1==NULL

12、

13、num_2==NULL)//当其中一个数位数不够时的判断{if(num_1==NULL)n=num_2->num;elsen=num_1->num;}elsen=num_1->num+num_2->num

14、-48;//因为运算的是ASCLL码,所以减去48,即重复的部分if(n>'9')//当ASCLL码超出57说明要进位了{n-=10;q=s;while(q->pro->num!='.')//进位的判断,这里从高位加到低位,所以进位的

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

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

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