#include<bits/stdc++.h>
using namespace std;
const int SIZE=10009;
int a[SIZE],b[SIZE],ans[SIZE];
char sa[SIZE],sb[SIZE];
int sz_a,sz_b,sz_ans;//加速
void converts(int *a,string s,int &x){
int i,len=s.size();
for(i=0;i<len;i++) a[i]=s[len-i-1]-'0';
x=i-1;
for(;i<SIZE;i++) a[i]=0;
}
void print(int *a,int sz){
int i;
for(i=sz;i>0;i--)if(a[i]>0) break;
for(;i>=0;i--)
cout<<a[i];
cout<<endl;
}
bool le(int *a,int *b,int &x,int &y){
int i;
if(x<y) return true;
if(y<x) return false;
for(i=x;i>=0&&a[i]==b[i];i--);
return i<0||a[i]<b[i];
}
void copy(int *a,int *b,int sz){
for(int i=0;i<=sz;i++) a[i]=b[i];
}
void mul(int *a,int &x){
bool flag=false;
for(int i=0;i<=x;i++){
a[i]<<=1;
if(flag) a[i]|=1;
if(a[i]>=10) a[i]-=10,flag=true;
else flag=false;
}
if(flag) a[++x]=1;
}
void div(int *a,int &x){
for(int i=x,c=0,now,tmp;i>=0;i--){
tmp=a[i];
if(a[i]&1){
now=((c*10+tmp)>>1)<<1;
a[i]=(c*10+tmp)>>1;
c=(c*10+tmp)-now;
}
else{
a[i]=(c*10+tmp)>>1;
c=0;
}
}
while(a[x]==0) x--;
if(x==0) x++;
}
void sub(int *a,int *b,int &x,int &y){
for(int i=0;i<=x;i++){
if((a[i]-=b[i])<0){
a[i+1]--;
a[i]+=10;
}
}
while(a[x]==0) x--;
if(x<0) x=0;
}
int main() {
scanf("%s%s",&sa,&sb);
converts(a,sa,sz_a);
converts(b,sb,sz_b);
ans[0]=1;
int cnt=0;
while(1){
if((!(a[0]&1))&&(!(b[0]&1)))
div(a,sz_a),div(b,sz_b),cnt++;
else if((!(a[0]&1))&&(b[0]&1)) div(a,sz_a);
else if((a[0]&1)&&(!(b[0]&1))) div(b,sz_b);
else{
if(le(b,a,sz_b,sz_a)&&le(a,b,sz_a,sz_b))
break;
else if(le(b,a,sz_b,sz_a))
sub(a,b,sz_a,sz_b);
else
sub(b,a,sz_b,sz_a);
}
}
if(!le(a,b,sz_a,sz_b)) copy(ans,a,sz_a),sz_ans=sz_a;
else copy(ans,b,sz_b),sz_ans=sz_b;
for(int i=1;i<=cnt;i++)
mul(ans,sz_ans);
print(ans,sz_ans);
return 0;
}
有一个点过不了/kk