今天学院做题除了两道大数题,大数加法和乘法,所以下面是自己理解后写的代码
#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;
}