才发现上次写的高精乘是错的,所以我就再写了一个
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char a[100],b[100];
int n1=0,n2=0,n,sa[100],sb[100],c[10000],f[100000]={0},nn1=0,nn2=0;
void zhuanhuan(int x)
{
if(x==1)
{
int l=strlen(a);
for(int i=0;i<l;i++)
{
if(a[i]!='-')
sa[i]=a[i]-'0';
}
}
else
{
int l=strlen(b);
for(int i=0;i<l;i++)
{
if(b[i]!='-')
sb[i]=b[i]-'0';
}
}
}
int main(void){
scanf("%s",&a);
getchar();
scanf("%s",&b);
n1=strlen(a);
n2=strlen(b);
zhuanhuan(1);
zhuanhuan(2);
if(a[0]=='-' && b[0]=='-')//判断负号
{
nn1++;
nn2++;
}
else
{
if(a[0]=='-' || b[0]=='-')
{
printf("-");
if(a[0]=='-')
nn1++;
if(b[0]=='-')
nn2++;
}
}
if(n1<n2)
{
swap(n1,n2);
swap(sa,sb);
}
n=0;
for(int i=n2-1;i>=nn2;i--)//乘法
{
for(int j=n1-1;j>=nn1;j--)
{
if(sa[j]*sb[i]+c[i+j+1]>=10)
{
c[i+j-1+1]=c[i+j-1+1]+(c[i+j+1]+sa[j]*sb[i])/10;
f[i+j-1+1]=1;
}
c[i+j+1]=(c[i+j+1]+(sa[j]*sb[i]))%10;
f[i+j+1]=1;
}
}
for(int i=0;i<n1+n2;i++)
{
if(f[i]==1)
printf("%d",c[i]);
}
}