//*******************************//
//超长整数字符串乘法的算法 //
//在vs2005下调试通过 //
//******************************//
#define MAX 10000
int a[MAX], b[4],c[MAX];
int times(int a[],int b[],int la,int lb)
//a[],b[]为两个被乘数输入,高位在前,0位不用,比a=120,则a[3]=1,a[2]=2,a[1]=0;输出c也是这样
//la,lb,lc为最高位位数,比如上例la=3;
{
int i,j,k,re,jin=0;
for(i=1;i<=MAX;i++)
c[i]=0;
for(i=1;i<=la;i++)
{
jin=0;
for(j=1;j<=lb;j++)//进位乘法
{
re=a[i]*b[j]+jin+c[i+j-1];
jin=re/10;
c[i+j-1]=re%10;
k=i+j-1;
}
while(jin>0)//考虑连续进位
{
k++;
re=c[k]+jin;
c[k]=re%10;
jin=re/10;
}
}
return k;//返回结果的位数
}
//示例
/*
main()
{
int i;
a[2]=2;a[1]=2;
b[2]=4;b[1]=4;
printf("%d/n",times(a,b,2,2));
for(i=3;i>=1;i--)
printf("%d",c[i]);
}
返回3
968
*/