#include<stdio.h>
#include<string.h>
char a[45];
char b[45];
int num1[45];
int num2[45];
int ans[2000];
int main()
{
int num;
int len1,len2;
int i;
int j;
int x=0;
int cnt1=0;
int cnt2=0;
scanf("%s",a);
scanf("%s",b);
len1=strlen(a);
len2=strlen(b);
for(i=len1-1; i>=0; i--)
{
num1[cnt1++]=a[i]-'0';
}
for(i=len2-1; i>=0; i--)
{
num2[cnt2++]=b[i]-'0';
}
for(i=0; i<len1; i++)
{
for(j=0; j<len2; j++)
{
ans[i+j]+=(num1[i]*num2[j]);
} }
for(i=0; i<=1600; i++)
{
if(ans[i]>9)
{
ans[i+1]+=ans[i]/10;
ans[i]%=10;
}
}
for(i=1600; i>=0; i--)
{
if(ans[i]!=0)
break;
}
for(; i>=0; i--)
{
printf("%d",ans[i]);
}
#include<string.h>
char a[45];
char b[45];
int num1[45];
int num2[45];
int ans[2000];
int main()
{
int num;
int len1,len2;
int i;
int j;
int x=0;
int cnt1=0;
int cnt2=0;
scanf("%s",a);
scanf("%s",b);
len1=strlen(a);
len2=strlen(b);
for(i=len1-1; i>=0; i--)
{
num1[cnt1++]=a[i]-'0';
}
for(i=len2-1; i>=0; i--)
{
num2[cnt2++]=b[i]-'0';
}
for(i=0; i<len1; i++)
{
for(j=0; j<len2; j++)
{
ans[i+j]+=(num1[i]*num2[j]);
} }
for(i=0; i<=1600; i++)
{
if(ans[i]>9)
{
ans[i+1]+=ans[i]/10;
ans[i]%=10;
}
}
for(i=1600; i>=0; i--)
{
if(ans[i]!=0)
break;
}
for(; i>=0; i--)
{
printf("%d",ans[i]);
}
}
高精度乘法前半部分其实和高精度加法雷同
主要注意这一步:
for(i=0; i<len1; i++)
{
for(j=0; j<len2; j++)
{
ans[i+j]+=(num1[i]*num2[j]);
} }
这是高精度乘法的核心,很简单,按照原始手算方法不难发现其实就是两个for循环的事情