大数相乘的解决方法

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;
}

 

你可能感兴趣的:(大数相乘的解决方法)