#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int a[10001],b[10001],c[10001],answerhe[10003],answercha[10003],ji[20003];
void inint(int duru[])
{
string ax;
cin>>ax;
duru[0]=ax.length();
for(int i=1;i<=duru[0];i++)
duru[i]=ax[duru[0]-i]-'0';
return;
}
void print(int jieguo[])
{
if(jieguo[0]==0)
printf("0\n");
else
{
for(int i=jieguo[0];i>=1;i--)
printf("%d",jieguo[i]);
printf("\n");
return;
}
return ;
}
int cmp(int b1[],int b2[]) //b1>b2 return 1;
{ //b1=b2 return 0;
if(b1[0]>b2[0]) //b1<b2 return -1;
return 1;
if(b1[0]<b2[0])
return -1;
for(int i=b1[0];i>0;i--) //重点,混淆了概念
{
//printf("第%d次循环,b1[%d]=%d,b2[%d]=%d",i,i,b1[i],i,b2[i]);
if(b1[i]>b2[i])
return 1;
else
{
if(b1[i]<b2[i])
return -1;
}
}
return 0;
}
void jian(int bei[],int jan[])
{
int flag;
flag=cmp(bei,jan);
if(flag==0)
{
bei[0]=1;
bei[1]=0;
return;
}
if(flag==1)
{
for(int i=1;i<=bei[0];i++)
{
if(bei[i]<jan[i])
{
bei[i+1]--;
bei[i]+=10;
}
bei[i]-=jan[i];
}
while(a[0]>1&&a[a[0]]==0)a[0]--;
return;
}
}
void numcpy(int p[],int q[],int det)
{
for(int i=1;i<=p[0];i++)
q[i+det-1]=p[i];
q[0]=p[0]+det-1;
}
void chugao(int shang[],int chushu[],int yu[])
{
int tmp[10003];
yu[0]=shang[0]-chushu[0]+1;
for(int i=c[0];i>0;i--)
{
memset(tmp,0,sizeof(tmp));
numcpy(b,tmp,i);
while(cmp(a,tmp)>=0)
{
c[i]++;jian(a,tmp);
}
}
while(c[0]>1&&c[c[0]]==0) c[0]--;
return ;
}
void jiafa()
{
answerhe[0]=max(a[0],b[0]);
for(int i=1;i<=a[0]||i<=b[0];i++)
{
answerhe[i]+=a[i]+b[i];
answerhe[i+1]=answerhe[i]/10;
answerhe[i]%=10;
}
if(answerhe[answerhe[0]+1]!=0)
answerhe[0]++;
return ;
}
void jianf(int jian[],int beijian[])
{
answercha[0]=max(jian[0],beijian[0]);
for(int i=1;i<=answercha[0];i++)
{
answercha[i]=beijian[i]-jian[i];
if(answercha[i]<0&&beijian[i+1]>0)
{
answercha[i]+=10;
beijian[i+1]--;
}
}
while(answercha[0]>0&&answercha[answercha[0]]==0)
answercha[0]--;
return;
}
void chengf(int ch1[],int ch2[])//从这里是乘法
{
for(int i=1;i<=ch1[0];i++)
{
int x=0;
for(int j=1;j<=ch2[0];j++)
{
ji[i+j-1]=ji[i+j-1]+ch1[i]*ch2[j]+x;
x=ji[i+j-1]/10;
ji[i+j-1]%=10;
}
ji[i+ch2[0]]+=x;
}
ji[0]=ch1[0]+ch2[0]+1;
while(ji[0]>1&&ji[ji[0]]==0)
ji[0]--;
return ;
}//乘法结束
int main()
{
inint(a);
inint(b);
jiafa();
print(answerhe);
int flar=cmp(a,b);
if(flar>=0)
{
jianf(b,a);
print(answercha);
}
else
{
printf("-");
jianf(a,b);
print(answercha);
}
for(int i=0;i<=a[0]+b[0]+1;i++)//给积初始化
ji[i]=0;
chengf(a,b);//计算乘积
print(ji);
chugao(a,b,c);
if(c[0]<=1)
printf("%d\n",c[1]);
else
print(c);
print(a);
return 0;
}
乘法那一块算的结果有时对有时不对,不知道为什么