《大整数的乘法实习报告(共11页).doc》由会员分享,可在线阅读,更多相关《大整数的乘法实习报告(共11页).doc(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上湖南涉外经济学院 计算机科学与技术专业算法设计与分析课程 大整数乘法问题 实 验 报 告班级: 学号: 姓名: 教师: 成绩: 2012年5月【实验目的】1 掌握设计有效算法的分治策略2 利用软件的方法来实现大整数的算术运算【系统环境】Windows 7 平台【实验工具】VC+6.0英文企业版【问题描述】 描述: 由于现在的许多方面需要在计算结果中要求精确地得到所有位数上的数字,就必须用软件的方法来实现大整数的运算。其中一般都通过数组来实现。例: 5464 *1231 其结果是:【实验原理】1 、开始时的思路:1.弄2个string类型的变量来获取乘数a与被乘数b2.
2、需要用到string类型的变量时再调用转换函数3.再定义个2维数组来装a*b的积、定义个d数组装最终结果4.写一个乘法和加法函数用来实现上述功能 2 、例子:【源程序代码】#include#includeusing namespace std;void MUL_max(string a,int la,string b,int lb,int *c);/相乘函数void ADD_max(int * d,int *c,int la,int lb);/相加函数char * ZhuanH(string);void main()string a;string b;int *c=NULL;int *d=NU
3、LL;int la=0,lb=0;int i=0,j=0,k=0;cout *大整数乘法*endl;couta;coutb;la=a.length();lb=b.length();/分配2维C数组,存储数组a和b的乘积c=new int*la; for(k=0;kla;k+)ck=new intlb+1;/分配数组d用于存储最终结果d=new intla+lb+1;for(i=0;ila+lb+1;i+)/初始化,便于后面判断相加后的有效位数di=0;/初始化数组C,便于后面判断相加后的有效位数for(i=0;ila;i+)for(j=0;j=lb;j+)cij=0;/调用函数MUL_max(
4、a,la,b,lb,c);ADD_max(d,c,la,lb);k=0;couta和b相乘结果是:endl;for(i=0;i=la+lb;i+)if(di=0)k+;elsebreak;for(i=k;i=la+lb;i+)coutdi;coutendl; /释放空间for(int n=0;n=0;i-)for(j=lb-1;j=0;j-)num_a=ai-48; num_b=bj-48;if(k=num_a*num_b)=10)/判断乘积是否有进位if(mid!=0)/判断前一次相乘是否有进位cij+1=k%10+mid;elsecij+1=k%10;mid=k/10;else/没有进位i
5、f(mid!=0)/判断前一次相乘是否有进位cij+1=k+mid;elsecij+1=k;mid=0;if(mid!=0)ci0=k/10;/如果乘数个位和被乘数相乘,最后有进位/数组相加函数void ADD_max(int *d,int *c,int la,int lb)int i=0,j=0;int mid=0;int num_a=0,num_b=0;int add=0,midnum=0;/将相乘得到的二维数组C各行错位相加,得到一位数组dfor(i=la-1;i=0;i-)for(j=lb;j=0;j-)num_a=di+j+1;num_b=cij;add=num_a+num_b;if(add=10)/判断相加是否有进位if(midnum=1)di+j+1=add%10+1;elsedi+j+1=add%10;midnum=1;elsedi+j+1=add;midnum=0;if(midnum=1)d0=add/10;/转化函数char * ZhuanH(string src)char *dst=new char255;int i;for(i=0;i=src.length();i+)dsti=srci;dsti=0;return dst;【实验结果】测试1:测试2:测试3:专心-专注-专业
限制150内