template/学习路径/算法/高精度乘法.cpp
2025-03-17 00:29:43 +08:00

33 lines
791 B
C++

#include<cstdio>
#include<cstring>
int main(){
char a1[2005],b1[2005];
int a[2005],b[2005],c[10000],lena,lenb,lenc,i,j,x;
memset(a,0,sizeof a);
memset(b,0,sizeof b);
memset(c,0,sizeof c);
//scanf("%[^\n]%*c%[^\n]%*c",&a1,&b1);
scanf("%s%s",&a1,&b1);
lena=strlen(a1);
lenb=strlen(b1);
for(i=0;i<=lena-1;i++)a[lena-i]=a1[i]-48;//倒序写入a
for(i=0;i<=lenb-1;i++)b[lenb-i]=b1[i]-48;//倒序写入b
for(i=1;i<=lena;i++)
{
x=0; //用于存放进位
for(j=1;j<=lenb;j++) //对乘数的每一位进行处理
{
c[i+j-1]=c[i+j-1]+a[i]*b[j]+x; //原数加上当前乘积加上上次乘积进位
x=c[i+j-1]/10;
c[i+j-1]%=10;
}
c[i+lenb]=x; //进位
}
lenc=lena+lenb;
while(c[lenc]==0&&lenc>1) //删除前导0
lenc--;
for(i=lenc;i>=1;i--)
printf("%d",c[i]);
printf("\n");
}