#include<iostream>
#include<memory.h>
using namespace std;
char str1[1000];
char str2[1000];
int a[1000];
int b[1000];
int i,j,k,len1,len2;
bool sign;
void mul(int *a, int *b)
{
int c[2000]={0},i,j,carry=0;
for ( i = 0; i < len1; ++i)
{
/* code */
for ( j = 0; j < len2; ++j)
{
/* code */
c[i+j]+=a[i]*b[j]+carry; //这里之前错了 += ,因为之前c[i+j]是有值的
carry=c[i+j]/10;
c[i+j]%=10;
}
c[i+j]=carry,carry=0; //learn to use two command in one line
}
i=len1+len2;
while(!c[i]&& i >= 0)
i -- ;
if(i < 0 )
printf("0\n");
else
{
if(sign<0)
printf("-");
for (;i>=0; --i)
{
/* code */
printf("%d",c[i]);
}
printf("\n");
}
}
int main(int argc, char const *argv[])
{
while(scanf("%s",&str1)!=EOF)
{
scanf("%s",&str2);
len1 = strlen(str1);
len2 = strlen(str2);
sign=1,i=0,k=0;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
if(str1[0]=='-')
k=1,sign*=-1;
for (int i = len1-1; i>=k; --i)
{
/* code */
a[len1-1-i]= str1[i]-'0';
}
k = 0;
if(str2[0]=='-')
k=1,sign*=-1;
for (int i = len2-1;i>=k;--i)
{
/* code */
b[len2-1-i]=str2[i]-'0';
}
mul(a,b);
}
return 0;
}
高精度乘法
最新推荐文章于 2021-01-06 18:35:53 发布