大整数乘法(分治法)

#include<iostream>
#include<math.h>
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<<i<<endl;
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<<w<<” “<<x<<endl;
}

int main(int argc, char* argv[])
{
 int multi,multi1;//定义两个乘数
 int number,number1,w,x,y,z,product,product1,product2,product3;
 cout<<“请输入乘数与被乘数,注意位数必须相同”<<endl;
 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<<product<<” “<<product1<<” “<<product2<<endl;
 cout<<product3<<endl;
 }
 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<<product<<” “<<product1<<” “<<product2<<endl;
 cout<<product3<<endl;
 }

return 0;
}
 

    原文作者:大整数乘法问题
    原文地址: https://blog.csdn.net/binyanye1/article/details/6508170
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞