大数乘以大数 C语言 算法代码

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/*

direction:高精度的运算,大数乘以大数任意两个大数相乘(没有小数位)input:

3

123 456

123456789123 987654321987

4568271943578954 4784561295435842

output:

56088

121932631355968601347401

21857177128273331865418768469268

date:09/07/2011

*/

#include

#include

#define N 100

void mult(char a[],char b[],char s[])

{

int alen,blen,re[N][N],i,j,k,result[N]={0};

alen=strlen(a);

blen=strlen(b);

for(i=alen-1;i>=0;i--)

for(j=blen-1;j>=0;j--)

re[alen-1-i][blen-j-1]=(a[i]-'0')*(b[j]-'0');

for(i=0;i<=alen+blen-2;i++)

{

if(i>=blen)

j=i-blen+1;

else

j=0;

for(;j<=i&&j

result[i]+=re[j][i-j];

if(result[i]>=10)

{

result[i+1]=result[i]/10;

result[i]=result[i]%10;

}

}

if(result[alen+blen-1])

k=alen+blen-1;

else

k=alen+blen-2;

for(i=k;i>=0;i--)

s[k-i]=(char)result[i]+'0';

s[k+1]='\0';

}

void main()

{

char a[N],b[N],c[N];

int n;

scanf("%d",&n);

while(n--)

{

scanf("%s%s",a,b);

mult(a,b,c);

puts(c);

memset(a,'\0',N);

memset(b,'\0',N);

memset(c,'\0',N);

}

}

相关文档
最新文档