大数乘法

 

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

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值