ITfeng

 

大数相乘问题--解决方案

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void mutiply(char*a,char*b,char*res)
{
 int len1,len2,len;
 char temp;
 int*result;
 int i=0,j;
 int startFlag=0;
 len1=strlen(a);
 len2=strlen(b);
 len=len1+len2+1;
 result=(int *)malloc(len*4);
 for(i=0;i<len;i++)
  result[i]=0;
 
 for(i=0;i<len1/2;i++)
 {
  temp=a[i];
  a[i]=a[len1-1-i];
  a[len1-1-i]=temp;
 }
 for(i=0;i<len2/2;i++)
 {
  temp=b[i];
  b[i]=b[len2-1-i];
  b[len2-1-i]=temp;
 }
 for(i=0;i<len1;i++)//竖式相乘
  for(j=0;j<len2;j++)
  {
   result[i+j]+=(a[i]-'0')*(b[j]-'0');
  }
 //处理进位
 for(i=0;i<len;i++)
 {
  if(result[i]>9)
  {
   result[i+1]+=result[i]/10;
   result[i]=result[i]%10;
  }
 }
 j=0;
 for(i=len-1;i>=0;i--)
 { if(result[i])
   startFlag=1;
  if(startFlag)   
  {
   printf("%d",result[i]);
   res[j++]=result[i]+'0';
  }
 }
 res[j]='\0';
 printf("\n");
 
 
}
int main()
{
 char a[]="1234343243";
 char b[]="112354364363463434";
 char c[100];
  mutiply(a,b,c); 
  printf("result=%s\n",c);
}

posted on 2012-04-26 21:18  ITfeng  阅读(236)  评论(0编辑  收藏  举报

导航