http://yinzhezq.blog.163.com/blog/static/1648628902011231382332/
参考博文,本人按照乘法的计算方法,即按位相乘、错位相加的办法,修改算法如下:
#include<iostream>
#include<string>
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);//相加函数
void main()
{
string a;
string b;
int **c=NULL;
int *d=NULL;
int *temp=NULL;
int la=0,lb=0;
int i=0,j=0,k=0;
int tenth1=0,tenth2=0,mul=0;
cout<<" ************ 大整数乘法 **************"<<endl;
cout<<"请输入乘数 :";
cin>>a;
cout<<"请输入被乘数:";
cin>>b;
la=a.length();
lb=b.length();
// 分配 2维 C数组 ,存储a和 b的乘积
c=new int*[la];
for(k=0;k<la;k++)
c[k]=new int[lb+1];
// 分配数组 d用于存储最终结果
d=new int[la+lb+1];
for(i=0;i<la+lb+1;i++)//初始化,便于后面判断相加的有效位数
d[i]=0;
k=i+j+1;
temp=new int[lb+1];
for(i=la-1;i>=0;i--)
{
for(int t=0;t<lb+1;t++)//初始化,便于后面判断相加的有效位数
temp[t]=0;
for(j=lb-1;j>=0;j--)
{
mul=(a[i]-48)*(b[j]-48)+tenth1;
tenth1=mul/10;
temp[j+1]=mul%10;
cout<<a[i]<<" "<<mul<<" "<<temp[j+1]<<endl;
}
temp[0]=tenth1;
tenth1=0;
//--k;
for(j=lb;j>=0;j--)
{
d[i+j+1]+=temp[j]+tenth2;
tenth2=d[i+j+1]/10;
d[i+j+1]=d[i+j+1]%10;
cout<<"d[i+j+1]="<<d[i+j+1]<<endl;
}
for(int k=0;k<=la+lb;k++)
cout<<d[k];
d[i]=tenth2;
tenth2=0;
}
k=0;
cout<<a<<"和"<<b<<"相乘结果是:";
for(i=0;i<=la+lb;i++)
{
if(d[i]==0)
k++;
else
break;
}
for(i=k;i<=la+lb;i++)
cout<<d[i];
cout<<endl;
delete [] temp;
delete [] d;
}