C++实现大整数乘法

//大整数乘法 #include #include using 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; cout<<" *******************大整数乘法********************"<>a; cout<<"请输入被乘数:"; cin>>b; while(a!="0"||b!="0") { int **c=NULL; int *d=NULL; int la=0,lb=0; int i=0,j=0,k=0; la=a.length(); lb=b.length(); //分配2维C数组,存储数组a和b的乘积 c=new int*[la]; for(k=0;kla+lb) cout<<0; else for(i=k;i<=la+lb;i++) cout<>a; cout<<"请输入被乘数:"; cin>>b; } } void MUL_max(string a,int la,string b,int lb,int **c) { int mid=0,i=0,j=0; int k=0; int num_a=0,num_b=0; //开始循环相乘la*lb次 for(i=la-1;i>=0;i--) { for(j=lb-1;j>=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;//取余 else c[i][j+1]=k%10; mid=k/10;//取整 } else//没有进位 { if(mid!=0)//判断前一次相乘是否有进位 c[i][j+1]=k+mid;//取余 else c[i][j+1]=k; mid=0; } } if(mid!=0) c[i][0]=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各行错位相加,得到一位数组d for(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; if(add>=10)//判断相加是否有进位 { if(midnum==1) d[i+j+1]=add%10+1; else d[i+j+1]=add%10; midnum=1; } else { d[i+j+1]=add; midnum=0; } } if(midnum==1) d[0]=add/10; }

你可能感兴趣的:(C++/C类,算法)