很简单的试商。
#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
const int MAX_N = 1001;
const int MAX_M = 501;
const int INF = 10;
char a[MAX_N],b[MAX_N];
int c[MAX_N],d[MAX_N],t[MAX_N],f[MAX_N];
int z[MAX_N];
int lengtha,lengthb;
int jia()
{
int i;
for (i=1;i<=max(lengtha,lengthb);i++)
f[i]+=c[i]+d[i],f[i+1]+=f[i]/INF,f[i]%=INF;
}
bool bigger()
{
if (lengtha>lengthb) return true;
if (lengtha<lengthb) return false;
int i;
for (i=lengtha;i>=1;i--)
{
if (c[i]>d[i]) return true;
if (c[i]<d[i]) return false;
}
return true;
}
int jian()
{
int i;
if (bigger())
for (i=1;i<=max(lengtha,lengthb);i++)
{
f[i]+=c[i]-d[i];
if (f[i]<0) f[i]+=10,f[i+1]--;
}
else
{
printf("-");
for (i=1;i<=max(lengtha,lengthb);i++)
{
f[i]+=d[i]-c[i];
if (f[i]<0) f[i]+=10,f[i+1]--;
}
}
}
int cheng()
{
int i,j;
for (i=1;i<=lengtha;i++)
for (j=1;j<=lengthb;j++)
f[i+j-1]+=c[i]*d[j],f[i+j]+=f[i+j-1]/INF,f[i+j-1]%=INF;
}
int jiajiancheng()
{
int i;
cin>>a>>b;
lengtha=strlen(a);
lengthb=strlen(b);
for (i=0;i<lengtha;i++)
c[lengtha-i]=a[i]-'0';
for (i=0;i<lengthb;i++)
d[lengthb-i]=b[i]-'0';
//jia();
//jian();
//cheng();
i=MAX_N-1;
while (!f[i]) i--;
if (i<=0) printf("0");
for (;i>=1;i--)
printf("%d",f[i]);
}
//加减乘
bool gsort_cheng(int v)
{
memset(t,0,sizeof(t));
int i,j;
for (i=1;i<MAX_N;i++)
t[i]=z[i];
for (i=v+1;i<MAX_N;i++)
t[i+v-1]+=f[i]*f[v]*2;
t[v+v-1]+=f[v]*f[v];
for (i=1;i<MAX_N;i++)
t[i+1]+=t[i]/INF,t[i]%=INF;
for (i=MAX_N-1;i>=1;i--)
{
if (t[i]>c[i]) return false;
if (t[i]<c[i]) return true;
}
return true;
}
int gsort()
{
int i,j,k;
for (i=MAX_M-1;i>=1;i--)
{
for (j=INF-1;j>=0;j--)
{
f[i]=j;
if (gsort_cheng(i))
{
for (k=1;k<MAX_N;k++)
z[k]=t[k];
j=-1;
}
}
}
}
int gaojingdukaigeng()
{
int i;
cin>>a;
lengtha=strlen(a);
for (i=0;i<lengtha;i++)
c[lengtha-i]=a[i]-'0';
gsort();
i=MAX_N-1;
while (!f[i]) i--;
if (i<=0) printf("0");
for (;i>=1;i--)
printf("%d",f[i]);
}
//开根
bool gsort_chu(int v)
{
memset(t,0,sizeof(t));
int i,j;
for (i=1;i<MAX_M;i++)
t[i]=z[i];
for (i=1;i<MAX_M;i++)
t[v+i-1]+=f[v]*d[i];
for (i=1;i<MAX_N;i++)
t[i+1]+=t[i]/INF,t[i]%=INF;
for (i=MAX_N-1;i>=1;i--)
{
if (t[i]>c[i]) return false;
if (t[i]<c[i]) return true;
}
return true;
}
int gchu()
{
int i,j,k;
for (i=MAX_M-1;i>=1;i--)
{
for (j=INF-1;j>=0;j--)
{
f[i]=j;
if (gsort_chu(i))
{
for (k=1;k<MAX_M;k++)
z[k]=t[k];
j=-1;
}
}
}
}
int chu()
{
int i;
cin>>a>>b;
lengtha=strlen(a);
lengthb=strlen(b);
for (i=0;i<lengtha;i++)
c[lengtha-i]=a[i]-'0';
for (i=0;i<lengthb;i++)
d[lengthb-i]=b[i]-'0';
gchu();
i=MAX_N-1;
while (!f[i]) i--;
if (i<=0) printf("0");
for (;i>=1;i--)
printf("%d",f[i]);
}
int main()
{
//jiajiancheng();
//gaojingdukaigeng();
chu();
return 0;
}