AcWing 793. 高精度乘法_带小数42ms
原题链接
简单
作者:
Erised
,
2019-08-23 19:56:37
,
所有人可见
,
阅读 776
# include <stdio.h>
# define N 1002
# define WEI 10
# define PI '0'
char A[N],B[N];
int C[2*N];
void MUL(char A[],char B[]);
int main()
{
//freopen("AAA.txt","r",stdin);
scanf("%s%s",A,B);
MUL(A,B);
return 0;
}
void MUL(char A[],char B[])
{
int a=0,b=0,c,m=-1,n=-1,F;
int i=0,j=0,k=0;
while(A[++m])if(A[m]=='.')a=m;//记录小数点
else if(a)A[m-1]=A[m]; //去掉小数点
while(B[++n])if(B[n]=='.')b=n;//B同理
else if(b)B[n-1]=B[n]; //去掉小数点
if(a)m--;
else a=m;
if(b)n--;
else b=n;
for(j=n-1; ~j; j--)
for(i=m-1,k=n-j-1; ~i; i--,k++)
{
C[k]+=(A[i]-PI)*(B[j]-PI);//模拟乘法
if(C[k]>=WEI)//进位
{
C[k+1]+=C[k]/WEI;
C[k]%=WEI;
}
}
F=m+n-a-b;
if(C[k])while(C[k]>=WEI)//进位
{
C[k]+=C[k]/WEI;
C[k++]%=WEI;
}
else while(k>F&&!C[k])k--;
while(k>=F)printf("%d",C[k--]);
i=0;
while(C[i]==0&&i<F)i++;
if(k>i)printf(".");
while(k>=i)printf("%d",C[k--]);
printf("\n");
}