欢迎来到天天文库
浏览记录
ID:53979692
大小:76.50 KB
页数:10页
时间:2020-04-12
《大整数的乘法实习报告.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、湖南涉外经济学院计算机科学与技术专业《算法设计与分析》课程大整数乘法问题实验报告班级:学号:姓名:教师:成绩:2012年5月9【实验目的】1掌握设计有效算法的分治策略2利用软件的方法来实现大整数的算术运算【系统环境】Windows7平台【实验工具】VC++6.0英文企业版【问题描述】描述:由于现在的许多方面需要在计算结果中要求精确地得到所有位数上的数字,就必须用软件的方法来实现大整数的运算。其中一般都通过数组来实现。例:5464*1231其结果是:【实验原理】1、开始时的思路:1>.弄2个string类型的变量来获取乘数a与被乘数b2>.需要用到stri
2、ng类型的变量时再调用转换函数3>.再定义个2维数组来装a*b的积、定义个d数组装最终结果4>.写一个乘法和加法函数用来实现上述功能2、例子:9【源程序代码】#include#includeusingnamespacestd;voidMUL_max(stringa,intla,stringb,intlb,int**c);//相乘函数voidADD_max(int*d,int**c,intla,intlb);//相加函数char*ZhuanH(string);voidmain(){stringa;stringb;int*
3、*c=NULL;int*d=NULL;intla=0,lb=0;inti=0,j=0,k=0;cout<<"************大整数乘法**************"<>a;cout<<"请输入被乘数:";cin>>b;9la=a.length();lb=b.length();//分配2维C数组,存储数组a和b的乘积c=newint*[la];for(k=0;k4、a+lb+1;i++)//初始化,便于后面判断相加后的有效位数d[i]=0;//初始化数组C,便于后面判断相加后的有效位数for(i=0;i5、//释放空间for(intn=0;n=0;i--)for(j=lb-1;j6、>=0;j--){num_a=a[i]-48;num_b=b[j]-48;if((k=num_a*num_b)>=10)//判断乘积是否有进位{if(mid!=0)//判断前一次相乘是否有进位c[i][j+1]=k%10+mid;elsec[i][j+1]=k%10;mid=k/10;}else//没有进位{if(mid!=0)//判断前一次相乘是否有进位c[i][j+1]=k+mid;else9c[i][j+1]=k;mid=0;}}if(mid!=0)c[i][0]=k/10;//如果乘数个位和被乘数相乘,最后有进位}//数组相加函数voidADD_7、max(int*d,int**c,intla,intlb){inti=0,j=0;intmid=0;intnum_a=0,num_b=0;intadd=0,midnum=0;//将相乘得到的二维数组C各行错位相加,得到一位数组dfor(i=la-1;i>=0;i--)for(j=lb;j>=0;j--){num_a=d[i+j+1];num_b=c[i][j];add=num_a+num_b;9if(add>=10)//判断相加是否有进位{if(midnum==1)d[i+j+1]=add%10+1;elsed[i+j+1]=add%10;midnum=8、1;}else{d[i+j+1]=add;midnum=0;}}if(midnu
4、a+lb+1;i++)//初始化,便于后面判断相加后的有效位数d[i]=0;//初始化数组C,便于后面判断相加后的有效位数for(i=0;i5、//释放空间for(intn=0;n=0;i--)for(j=lb-1;j6、>=0;j--){num_a=a[i]-48;num_b=b[j]-48;if((k=num_a*num_b)>=10)//判断乘积是否有进位{if(mid!=0)//判断前一次相乘是否有进位c[i][j+1]=k%10+mid;elsec[i][j+1]=k%10;mid=k/10;}else//没有进位{if(mid!=0)//判断前一次相乘是否有进位c[i][j+1]=k+mid;else9c[i][j+1]=k;mid=0;}}if(mid!=0)c[i][0]=k/10;//如果乘数个位和被乘数相乘,最后有进位}//数组相加函数voidADD_7、max(int*d,int**c,intla,intlb){inti=0,j=0;intmid=0;intnum_a=0,num_b=0;intadd=0,midnum=0;//将相乘得到的二维数组C各行错位相加,得到一位数组dfor(i=la-1;i>=0;i--)for(j=lb;j>=0;j--){num_a=d[i+j+1];num_b=c[i][j];add=num_a+num_b;9if(add>=10)//判断相加是否有进位{if(midnum==1)d[i+j+1]=add%10+1;elsed[i+j+1]=add%10;midnum=8、1;}else{d[i+j+1]=add;midnum=0;}}if(midnu
5、//释放空间for(intn=0;n=0;i--)for(j=lb-1;j
6、>=0;j--){num_a=a[i]-48;num_b=b[j]-48;if((k=num_a*num_b)>=10)//判断乘积是否有进位{if(mid!=0)//判断前一次相乘是否有进位c[i][j+1]=k%10+mid;elsec[i][j+1]=k%10;mid=k/10;}else//没有进位{if(mid!=0)//判断前一次相乘是否有进位c[i][j+1]=k+mid;else9c[i][j+1]=k;mid=0;}}if(mid!=0)c[i][0]=k/10;//如果乘数个位和被乘数相乘,最后有进位}//数组相加函数voidADD_
7、max(int*d,int**c,intla,intlb){inti=0,j=0;intmid=0;intnum_a=0,num_b=0;intadd=0,midnum=0;//将相乘得到的二维数组C各行错位相加,得到一位数组dfor(i=la-1;i>=0;i--)for(j=lb;j>=0;j--){num_a=d[i+j+1];num_b=c[i][j];add=num_a+num_b;9if(add>=10)//判断相加是否有进位{if(midnum==1)d[i+j+1]=add%10+1;elsed[i+j+1]=add%10;midnum=
8、1;}else{d[i+j+1]=add;midnum=0;}}if(midnu
此文档下载收益归作者所有