大整数运算演示程序_第1页
大整数运算演示程序_第2页
大整数运算演示程序_第3页
大整数运算演示程序_第4页
大整数运算演示程序_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

大整数运算一、实验名称:大整数运算二、实验目的:1、掌握超大数运算的一般实现方法三、实验内容:例:编写程序实现两个大的整数的四则运算及大小比较运算。基本思路:用字符数组存放大整数的各个位,以字符串形式输入大整数,逐位而不是整体进行各类运算。由于现实中数值都是高位在前低位在后,而C语言中将一个字符串输入到一个字符数组中去时,下标为0的元素存放字符串的第一个字符,亦即以字符串形式将一个多位整数输入到一个字符数组中去时,0号元素存放的是实际的最高位。为了方便算法的实现,我们将多位大整数输入到字符数组中去后,先进行逆置,以保证个位存入0号元素,十位存入1号元素,而在输出时,为了跟现实习惯一致,先逆置后再输出。参考程序:#include #include #include #define N 100/逆置,因为计算机中数据的高低位跟现实中的习惯刚好相反void revert(char t)int i,len;char temp;len=strlen(t);for(i=1;iN)|(strlen(b)N);/对两个数进行大小比较char compare(char a,char b)int i,yn,jg;/现实中一个数值中高位的0对数值的大小无意义,取消for(i=strlen(a)-1;(i0)&(ai=0);i-)ai=0;for(i=strlen(b)-1;(i0)&(bi=0);i-)bi=0;if(strlen(a)strlen(b)return 1;elseif(strlen(a)=0)&(yn=1);i-)if(aibi)jg=1;yn=0;elseif(aistrlen(b)?strlen(a):strlen(b);p=(char *)malloc(len);/进行加法运算z=0;/最低位进位为0for(i=0;i(strlen(a)strlen(b)?strlen(b):strlen(a);i+) /做加法计算 if(strlen(a)=strlen(a)x=0;y=bi-0;elseif(strlen(a)strlen(b)&(i=strlen(b)x=ai-0;y=0;elsex=ai-0;y=bi-0;sum=x+y+z;z=sum/10;/计算出下一次的进位pi=sum%10+0;/计算出当前位的和 pi=z+0;pi+1=0;/取消无用的0while(i0)&(pi=0)pi-=0;return(p);/对两个数实现减法运算,调用时保证a=bchar * subtract(char a,char b)char *result;int la,lb,len,ai,bi,ti,s,c;/分配存放差的空间len=1+(strlen(a)strlen(b)?strlen(a):strlen(b);result=(char *)malloc(len); la=strlen(a)-1; lb=strlen(b)-1; c=0;/c用表示相减时是否出现借位,0:无借位1:有借位ai=bi=ti=0; while(ailb)s=aai+-0; elses=aai+-bbi+; resultti+=s-c+0; if(resultti-10)&(resultti=0);ti-)resultti=0; return(result);/对两个数实现乘法运算char * multiply(char a,char b)char *p;unsigned int i,j,x,y,r1,r2,r3;p=(char *)malloc(1+strlen(a)+strlen(b);/对存放乘积的空间进行初始化pstrlen(a)+strlen(b)=0;for(i=0;istrlen(p);i+)pi=0;/进行乘法运算for(i=0;istrlen(b);i+)/乘的趟数与乘数的位置一致y=bi-0;for(j=0;j0)&(pi=0);i-)pi=0;return(p);/对两个数实现除法运算char * divide(char a,char b)char *p;unsigned int i,len;len=1+(strlen(a)strlen(b)?strlen(a):strlen(b);p=(char *)malloc(len);/对存放商的空间进行初始化strcpy(p,0);/进行除法运算while(compare(a,b)=0)strcpy(p,add(p,1);strcpy(a,subtract(a,b);/将前导0取消for(i=strlen(p)-1;(i0)&(pi=0);i-)pi=0;return(p);void main()char aN,bN,c2*N,xz=1,signal;doprintf(请选择要进行的运算:n);printf(1加2减3乘4除5比较大小0退出:);scanf(%d,&xz);switch(xz)case 0:printf(谢谢使用!n);system(pause);break;case 1:/加input(a,b);/逆置,以方便运算revert(a);revert(b);strcpy(c,add(a,b);/逆置,以便跟现实中的高低位顺序一致revert(c);printf(和:%sn,c);break;case 2:/减input(a,b);/逆置,以方便运算revert(a);revert(b);signal=compare(a,b);switch(signal)case 1:strcpy(c,subtract(a,b);break;case -1:strcpy(c,subtract(b,a);break;case 0:strcpy(c,0);/逆置,以便跟现实中的高低位顺序一致revert(c);switch(signal)case 1:printf(差:+%sn,c);break;case -1:printf(差:-%sn,c);break;case 0:printf(差:0n);break;case 3:/乘input(a,b);/逆置,以方便运算revert(a);revert(b);strcpy(c,multiply(a,b);/逆置,以便跟现实中的高低位顺序一致revert(c);printf(积:%sn,c);break;case 4:/除input(a,b);/逆置,以方便运算revert(a);revert(b);strcpy(c,divide(a,b);/逆置,以便跟现实中的高低位顺序一致revert(a);revert(c);if(strlen(a)=0)printf(商:%s,余数:%sn,c,0);elseprintf(商:%s,余数:%sn,c,a);break;case 5:/比较input(a,b);/逆置,以方便运算revert(a);revert(b);/逆置,以便跟现实中的高低位顺序一致signal=compare(a,b);revert(a);re

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论