大数乘以大数 C语言 算法代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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); } }