大数乘法

 

今天学院做题除了两道大数题,大数加法和乘法,所以下面是自己理解后写的代码

#include<iostream>
#include<string>
using namespace std;
string a,b;
int aa[1000],bb[1000],cc[2000];  //1000位以内的乘法   cc数组为结果
int la,lb;          //字符串a,b的长度
void init()        //初始化
{
     memset(aa,0,sizeof(aa));               //对数组aa,bb,cc清零
     memset(bb,0,sizeof(bb));
     memset(cc,0,sizeof(cc));
     la=a.length();
     lb=b.length();
     int i,j;
     for(i=0,j=la-1;j>=0;j--,i++)            //数组逆存字符的高地位
         aa[i]=a[j]-'0';
     for(i=0,j=lb-1;j>=0;j--,i++)
         bb[i]=b[j]-'0';
        
}

void multiply()                
{
     for(int i=0;i<la;i++)
       for(int j=0;j<lb;j++)
          cc[i+j]+=aa[i]*bb[j];                //按位相乘,结果加在相应位置
     int n;
     for(int k=0;k<la+lb;k++)                  //进位处理
     {
           if(cc[k]>9)
            {
                cc[k+1]+=cc[k]/10;
                cc[k]%=10; 
            }
     }
     n=la+lb;
     while(cc[n]==0)                       //去掉前导0;
     n--;
     for(;n>=0;n--)                         //逆序输出
     cout<<cc[n];
     cout<<endl;
}


int main()
{
    while(cin>>a>>b)
    {
        init();
        multiply();           
    }
    return 0;
}

 

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