rt,样例对。
#include<bits/stdc++.h>
using namespace std;
#define int long long
int f[10005];
class Bigint
{
public:
int len,a[10005];
void init()
{
for(int i=0;i<=len+1;i++)
a[i]=0;
len=0;
return ;
}
void read()
{
init();
char ch=getchar();
while(!isdigit(ch))
ch=getchar();
while(isdigit(ch))
a[++len]=ch-'0',ch=getchar();
reverse(a+1,a+len+1);
return ;
}
void write()
{
for(int i=len;i>=1;i--)
cout<<a[i];
return ;
}
bool operator<(const Bigint &x)const
{
if(len!=x.len)
return len<x.len;
for(int i=len;i>=1;i--)
if(a[i]!=x.a[i])
return a[i]<x.a[i];
return false;
}
friend Bigint operator+(Bigint x,Bigint y)
{
Bigint ans;
ans.init();
int Alen=x.len,Blen=y.len,Clen=max(Alen,Blen),jw=0;
for(int i=1;i<=Clen;i++)
{
ans.a[++ans.len]=(x.a[i]+y.a[i]+jw)%10;
jw=(x.a[i]+y.a[i]+jw)/10;
}
if(jw!=0)
ans.a[++ans.len]=jw;
return ans;
}
friend Bigint operator-(Bigint x,Bigint y)
{
Bigint ans;
ans.init();
int Alen=x.len,Blen=y.len,Clen=max(Alen,Blen),tw=0;
for(int i=1;i<=Clen;i++)
{
ans.a[++ans.len]=(x.a[i]-y.a[i]-tw+10)%10;
if(x.a[i]-y.a[i]-tw<0)
tw=1;
}
while(ans.len>1&&ans.a[ans.len]==0)
ans.len--;
return ans;
}
friend Bigint operator/(Bigint x,int y)
{
int len=x.len,ys=0;
for(int i=1;i<=len;i++)
f[i]=x.a[i];
reverse(f+1,f+len+1);
Bigint ans;
ans.init();
for(int i=1;i<=len;i++)
{
int s=(ys*10+f[i])/y;
if(s!=0)
ans.a[++ans.len]=s;
ys=(ys*10+f[i])%y;
}
reverse(ans.a+1,ans.a+ans.len+1);
return ans;
}
};
void Swap(Bigint &x,Bigint &y)
{
Bigint z=x;
x=y;
y=z;
return ;
}
Bigint a,b,ans;
int cnt=0;
signed main()
{
a.read(),b.read();
ans.a[++ans.len]=1;
while(a<b||b<a)
{
if(a<b)
Swap(a,b);
if(a.a[1]%2==0)
{
a=a/2;
if(b.a[1]%2==0)
{
cnt++;
b=b/2;
}
}
else if(b.a[1]%2==0)
b=b/2;
else
a=a-b;
}
while(cnt--)
a=a+a;
a.write();
return 0;
}