大整数乘法(分治法)

#include
#include
using namespace std;

int num(int u) //计算乘数的位数
{
 int i,num;
 i=1;
 num=u/10;
 while(num!=0)
 {
  u=num;
  num=u/10;
  i=i+1;
 }
// cout< return i;
}

void MUL(int u,int i,int &w,int &x)//将乘数分治
{
 w=u/(pow(10,i/2));
 x=u-w*pow(10,i/2);
// cout< }


int main(int argc, char* argv[])
{
 int multi,multi1;//定义两个乘数
 int number,number1,w,x,y,z,product,product1,product2,product3;
 cout<<"请输入乘数与被乘数,注意位数必须相同"<  cin>>multi>>multi1;
 number=num(multi);//计算位数
 number1=num(multi1);
 MUL(multi,number,w,x);//将乘数分治
 MUL(multi1,number1,y,z);
 if(number%2!=0)//如果乘数位数是奇数
 {
 product=w*y*pow(10,number-1);
 product1=((w+x)*(y+z)-w*y-x*z)*pow(10,number/2);
 product2=x*z;
 product3=product+product1+product2;
// cout<  cout<  }
 else//如果乘数位数是偶数
 {
 product=w*y*pow(10,number);
 product1=((w+x)*(y+z)-w*y-x*z)*pow(10,number/2);
 product2=x*z;
 product3=product+product1+product2;
// cout<  cout<  }

return 0;
}
 

你可能感兴趣的:(大整数乘法(分治法))