资源描述:
《大整数运算演示程序》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、大整数运算一、实验名称:大整数运算二、实验目的:1、掌握超大数运算的一般实现方法三、实验内容:例:编写程序实现两个大的整数的四则运算及大小比较运算。基本思路:用字符数组存放大整数的各个位,以字符串形式输入大整数,逐位而不是整体进行各类运算。由于现实屮数值都是高位在前低位在后,而c语言屮将一个字符串输入到一个字符数组中去时,下标为0的元素存放字符串的第一个字符,亦即以字符串形式将一个多位整数输入到一个字符数组中去吋,0号元素存放的是实际的最高位。为了方便算法的实现,我们将多位大整数输入到字符数组屮去后,先进行逆置,以保证个位存入0号元素,十位存入1号元素……,而在输出时
2、,为了跟现实习惯一致,先逆置后再输出。参考程序:#inelude#include#include〈string.h>#defineN100//逆置,因为计算机中数据的高低位跟现实中的习惯刚好相反voidrevert(chart[]){inti,len;chartemp;len=strlen(t);for(i=l;i<=len/2;i++){temp=t[i-1];t[i-l]=t[len-i];t[len-i]=temp;}}//以字符串形式输入被乘数和乘数voidinput(chara[],charb[]){do{printfC
3、请输入要进行乘法运算的两个整数(单个数不要超%(1位):〃,N);scanf("%s%s",a,b);}while((strlen(a)>N)
4、
5、(strlen(b)>N));//对两个数进行大小比较charcompare(chara[],charb[]){inti,yn,jg;〃现实中一个数值中高位的0对数值的大小无意义,取消for(i=strlen(a)-l;(i>0)&&(a[i]==,O');i—)a[i]二' ';for(i=strlen(b)-1;(i>0)&&(b[i]=二'O');i一-)b[i]=, ?;if(str1en(a)>strl
6、en(b))return1;elseif(strlen(a)=0)&&(yn==l));i--)if(a[i]>b[ij){jg=l;yn=0;}elseif(a[i]strlen(b))?strlen(a
7、):strlen(b));p=(char*)malloc(len);//进行加法运算z=0;//最低位进位为0for(i=0;i<((str1en(a)=strlen(a))){x二0;y=b[i]-O';}elseif((strlen(a)>strlen(b))&&(i>=strlen(b))){x二a[i]-'O';y二0;}else{x二a[i]-'O';y=b[i]-0,;}sum二x+y+z;z=sum/l0;//
8、计算出卜-一次的进位p[i]=sum%10+,O';〃计算出当前位的和}讥i]=z+,O';p[i+U- ';〃取消无用的0while((i>0)&&(p[i]==,O'))讥i--]二' ,;return(p);}//对两个数实现减法运算,调用时保证a>=bchar*subtract(chara[],charb[]){char^result;intla,lb,len,ai,bi,ti,s,c;〃分配存放差的空间len=14-((strlen(a)>strlen(b))?strlen(a):strlen(b));result=(char*[malloc(len);
9、la=strlen(a)-l;lb二strlen(b)-l;c二0;//c用表示相减时是否出现借位,0:无借位1:有借位ai=bi=ti=O;while(ai<=]a)//注意结朿条件if(bi>lb)s=a[ai++]-'O';elses二a[ai++]-b[bi++];result[ti++]二s-c+'O';if(result[ti-l]<,O')//有借位{result[ti-l]+=10;//当前位加10c二1;//向高位借1}else//无借位c=0;}result[ti]=, ';for(ti=la;(ti〉0)&&(result[t