超长整数字符串乘法的算法

来源:互联网 发布:c 多线程编程面试题 编辑:程序博客网 时间:2024/04/29 15:24


//*******************************//
//超长整数字符串乘法的算法  //
//在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
*/ 

原创粉丝点击