超长整型数据的存储与计算课程设计说明书.docx
- 文档编号:3413507
- 上传时间:2022-11-22
- 格式:DOCX
- 页数:22
- 大小:66.15KB
超长整型数据的存储与计算课程设计说明书.docx
《超长整型数据的存储与计算课程设计说明书.docx》由会员分享,可在线阅读,更多相关《超长整型数据的存储与计算课程设计说明书.docx(22页珍藏版)》请在冰豆网上搜索。
超长整型数据的存储与计算课程设计说明书
摘要
计算机的一个重要功能是进行科学计算,在科学研究和工程计算里.经常会遇到一些很大的整数的计算问题,这些整数的计算没有办法利用普通的微机直接用现有程序设计语言中的整数类型进行存储和计算,这样就给研究工作带来了障碍。
因此为解决超长整数的存储与运算设计,本人提出了自己的解决方案,采用字符串,数组对超长整数进行存储,即把处理数值改为处理字符串,因为字符串没有长度限制,且字符串中的每一个字符正好可以对应超长整数中的一位数字,把超长整数的加减乘除,转化为字符串的加减乘除。
用数组对超长整数进行存储.其优点是进行运算的时候比较方便。
设计方案提出后,本文实现了这个超长整型数据的存储与运算程序,并对其进行了测试,系统各项性能均达到了预期水平。
本文的最后对该程序进行了详细的演示。
关键词:
超长整数;字符串;数组
Abstract
Oneoftheimportantfunctionsofcomputerisscientificcomputing,inscientificresearchandengineeringcalculation.Oftenencounteredsomebigintegercalculationproblem,thecalculationofintegerswithoutmethodusingcommonmicrocomputersdirectlybytheintegerprogramminglanguageisexistingtypesofstorageandcalculation,thisresearchworktobringabarrier.
Solongintegersolutionsforthestorageandoperation,Iputforwarditsowndesignsolutions,usingstringarrayoflongintegers,store,theprocessingwithnumericalinstead,becausethestringstringlength,andnotjustineachcharacterstringscanbeoneofthecorrespondingultra-longintegernumber,thelongintegers,add,subtract,multiplyanddivideintoastringofadd,subtract,multiplyanddivide.Useoflongintegerarraystores.Theadvantagesofcomputingiseasier.
Afterthedesign,thispaperrealizedthelongintegerdatastorageandoperationprocedures,andanalysesthetestingsystem,variousperformancecanachievethedesiredlevel.Basedonthisprogramattheendofthedetailedpresentation.
Keywords:
longinteger;string;array
目录
第一章绪论1
1.1课题背景1
1.2课题简介1
1.3编写目的1
1.4课程意义1
第二章设计简介及设计方案论述2
2.1程序分析2
2.2程序设计2
2.2.1数据的接收与存储2
2.2.2计算结果位数的确定2
2.2.3进位处理和借位处理3
2.2.4商和余数的求法4
第三章详细设计5
3.1超长整型数据的接收与存储5
3.2超长整数加法运算5
3.3超长整数减法运算6
3.4超长整数乘法运算6
3.5超长整数的整除、求余运算7
第四章设计结果及分析10
4.1基本界面10
4.2运行过程10
4.3数据存储运算范围10
总结11
致谢12
参考文献13
附录14
第一章绪论
1.1课题背景
随着计算机在全球范围内日益普及,当今社会正快速向信息化社会前进,由于计算机具有运算速度快,计算精度高的特点,许多过去由人来完成的烦琐、复杂的数学计算,现在都可以由计算机来代替,人可以从计算中解放出来,做更具有创造性的工作。
1.2课题简介
在C语言和VB中对于有符号的长整型数据的范围是-2147483648到2147483647之间,本设计是对超过这个范围的整数(以下简称超长整数)设计其存储方法和运算。
(1)请设计单个超长整数的绝对值最大值是10101-1,两个超长整数运算后的结果值的绝对值最大不超过(10101-1)×(10101-1)。
(2)分别编写对两个超长整数进行加、减、乘、整除、求余运算的函数。
(3)程序运行时可以对从键盘输入的两个超长整数进行以上五种运算。
(4)使用C或VB编写程序。
1.3编写目的
利用程序设计的方法去实现计算要求精度高,希望计算的数的位数可达几十位甚至几百位,但受硬件限制的超长整数的存储与计算问题。
1.4课程意义
1、掌握超长整数的计算基本方法并能应用。
2、掌握超长整数加法、超长整数减法、超长整数乘法。
3、掌握超长整数除法及运算中被除数、除数、商和余数之间的关系。
4、分析总结常用超长整数算法特点,并能编写相应的程序。
5、在学习的过程中应强化“算法领先”的意识,根据实际情况对超长整数运算进行优化的策略与方法。
第二章设计简介及设计方案论述
2.1程序分析
所谓的超长整数运算,是指参与运算的整数(加数,减数,因子……)范围大大超出了标准数据类型(整型)能表示的范围的运算。
例如,求两个100位的数的和。
这时,就要用到超长整数算法了。
在计算机上进行超长整数计算,首先要处理好以下几个基本问题:
1、 数据的接收与存储;
2、计算结果位数的确定;
3、 进位处理和借位处理;
4、商和余数的求法;
2.2程序设计
2.2.1数据的接收与存储
要在计算机上进行超长整型数据的计算,首先就应该有精确的输入,即计算机要精确地接收和存储数据。
通常:
①、当输入的数值在计算机允许的范围内时,可以用数值型变量来接收数据。
②、当输入的数据超过计算机允许显示的精度范围时,采用字符来接收数据。
③、分离各位数字。
接收数据子模块(字符型变量接收数据):
inti,la,lb;
scanf("%s",c1);/*输入两个超长整型数据*/
scanf("%s",c2);
la=strlen(c1);/*la纪录c1的位数*/
lb=strlen(c2);/*lb纪录c2的位数*/
for(i=0;i for(i=0;i 2.2.2计算结果位数的确定 1、两数之和的位数最大为较大的数的位数加1。 2、乘积的位数最大为两个因子的位数之和。 2.2.3进位处理和借位处理 1、加法的进位处理 两数相加时,从低位到高位,各位数字分别相加,然后对相加后的数和10进行整除和求余运算,整除之后的值为进位,而余数就等于所求数之和。 不断重复,直到最高位为止。 具体算法为: for(i=0;i { c[i]=a[i]+b[i]+c[i]; c[i+1]=(int)c[i]/10;/*c[i+1]代表进位*/ c[i]=(int)c[i]%10;/*超长整数加法运算过程*/ } 2、乘法的进位处理 首先计算被乘数与乘数的个位数字的乘积,把结果保存到积数组中,然后再用被乘数去乘以乘数的十位数字,把结果退一位加到积数组中。 每加一次乘积结果就进行一次进位处理,其方法与加法中的进位处理一样。 for(i=0;i for(j=0;j { c[i+j]=a[i]*b[j]+c[i+j]; c[i+j+1]=c[i+j]/10+c[i+j+1]; c[i+j]=c[i+j]%10; } 3、减法的借位处理 做减法运算时,要先判断是否需要借位,如果需要借位,从上一位借过一个10,上一位的数减去1,处理完之后再相减。 for(i=0;i { if(a[i] {a[i+1]--; a[i]+=10; } c[i]=a[i]-b[i]; } 2.2.4商和余数的求法 按照竖式计算的方式,设置一个临时的被除数,如果大于除数,则两数相减,临时商加1,直到临时被除数小于除数,此时把临时商写入商的相应位置,然后临时被除数*10加上被除数的下一位,如此循环,直至临时被除数小于除数,则此时临时被除数即就是余数。 : chartemp[2]="0";//临时数组依次存储被除数的每一位数 inti,s,k; strcpy(x,"");//先使余数的值为空 for(i=0,k=0;u[i]! ='\0';i++) { s=0; temp[0]=u[i]; strcat(x,temp);//接上被除数的一位数,改变当前余数 while(Compare(x,v)>=0)//连减试商 { s++; isub(x,v,x);//isub()为一个自定义的整数减法函数 } w[k++]=s+'0';//记录每一位得到的商值 第三章详细设计 3.1超长整型数据的接收与存储 voidinput(inta1[],inta2[])/*函数input为输入函数,用来纪录两个待计算的超长整型数据,以数组首地址为参数.以实现返回两个超长整型数据*/ { inti,a=1,b=1; printf("请输入第一个数: \n"); scanf("%s",c1); printf("请输入第二个数: \n");/*输入两个超长整型数据*/ scanf("%s",c2); la=strlen(c1);/*la纪录c1的位数*/ lb=strlen(c2);/*lb纪录c2的位数*/ if(c1[0]=='-'){la--;ra=-1;a=0;}/*判断数组的符号*/ if(c2[0]=='-'){lb--;rb=-1;b=0;} for(i=0;i for(i=0;i } 3.2超长整数加法运算 voidadd(inta[],intb[],intp)/*超长整数加法运算*/ { inti,c[MAX+1]={0},d; if(ra*rb>0||p) { if(la>lb)d=la; elsed=lb;/*用d纪录结果的最大位数*/ for(i=0;i { c[i]=a[i]+b[i]+c[i]; c[i+1]=(int)c[i]/10;/*c[i+1]代表进位*/ c[i]=(int)c[i]%10;/*超长整数加法运算过程*/ } if(c[d])d++;/*判断最后结果的位数*/ if(ra<0&&p||ra<0)printf("-"); for(i=d-1;i>=0;i--)printf("%d",c[i]);/*输出结果*/ } elsesub(a,b,1); } 3.3超长整数减法运算 voidsub(inta[],intb[],intp)/*超长整数减法运算*/ { inti,h=0,c[MAX+1]={0},d; if(ra*rb>0||p) { if(la>lb)d=la; else/*用d纪录结果的最大位数*/ {d=lb; for(i=d;a[i]<=b[i]&&i>=0;i--) if(a[i] } if(! h)/*超长整数减法运算过程*/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 超长 整型 数据 存储 计算 课程设计 说明书
![提示](https://static.bdocx.com/images/bang_tan.gif)