高精度乘法
描述
之前做过了一道关于高精度加法的,想必难不倒大家,那么请大家现在尝试一下高精度乘法吧!
输入
输入包括两行。
第一行一个整数A,第二行一个整数B。(0≤A,B≤1010000 \le A,B \le 10 ^ {1000}0≤A,B≤101000)
输出
输出一行,A和B的乘积。
输入样例 1
111111111111
111111111111
输出样例 1
12345679012320987654321
#include<stdio.h>
#include<string.h>
int main()
{
char a[1005],b[1005];
int a1[1005],b1[1005],r[2050]={0};
int la,lb,l,i,j;
scanf("%s%s",a,b);
la=strlen(a);
lb=strlen(b);
for(i=0;i<la;i++) //换成int防止char越界
a1[i]=a[i]-'0';
for(i=0;i<lb;i++)
b1[i]=b[i]-'0';
if(a1[0]==0||b1[0]==0)
printf("0\n"); //注意如果有一个数为零,直接输出零
else
{for(i=0;i<la;i++)
{
for(j=0;j<lb;j++)
{
r[i+j]=r[i+j]+a1[i]*b1[j];
}
}
l=la+lb-1;
for(i=l-1;i>0;i--)
{
if(r[i]>9)
{
r[i-1]+=r[i]/10;
r[i]=r[i]%10;
}
}
if(r[0]>9)
{printf("%d",r[0]/10);
r[0]=r[0]%10;}
for(i=0;i<l;i++)
printf("%d",r[i]);
printf("\n");}
return 0;
}