#include<bits/stdc++.h>
using namespace std;
struct bigint{
int len,a[10005];
bigint(){
len=1;
memset(a,0,sizeof a);
}
bigint(int c){
len=1;
memset(a,0,sizeof a);
a[1]=c;
}
bigint(string b){
len=b.size();
memset(a,0,sizeof a);
for(int i=0;i<len;i++){
a[len-i]=b[i]-'0';
}
}
int & operator [] (const int &i){
return a[i];
}
bigint & operator = (const string &b){
len=b.size();
memset(a,0,sizeof a);
for(int i=0;i<b.size();i++){
a[len-i]=b[i]-'0';
}
return *this;
}
void shift(int L){
len=L;
for(int i=1;i<=L;i++){
if(a[i]<0){
a[i+1]--;
a[i]+=10;
continue;
}
a[i+1]+=a[i]/10,a[i]%=10;
}
while(len>1&&a[len]==0)len--;
}
void print(){
for(int i=max(len,1);i>=1;i--)cout<<a[i];
cout<<endl;
}
};
bool operator >= (bigint a,bigint b){
if(a.len<b.len)return false;
for(int i=a.len;i>=1;i--){
if(a[i]!=b[i])return a[i]>b[i];
}
return true;
}
bool operator == (bigint a,bigint b){
if(a.len!=b.len)return false;
for(int i=a.len;i>=1;i--){
if(a[i]!=b[i])return false;
}
return true;
}
bigint operator + (bigint a,bigint b){
bigint c;
c.len=max(a.len,b.len);
for(int i=1;i<=c.len;i++){
c[i]+=a[i]+b[i];
}
c.shift(c.len+1);
return c;
}
bigint operator - (bigint a,bigint b){
bigint c;
c.len=max(a.len,b.len);
for(int i=1;i<=c.len;i++){
c[i]+=a[i]-b[i];
}
c.shift(c.len);
return c;
}
bigint operator * (bigint a,bigint b){
bigint c;
c.len=a.len+b.len;
for(int i=1;i<=b.len;i++){
for(int j=1;j<=a.len;j++){
c[i+j-1]+=a[j]*b[i];
}
}
c.shift(c.len);
return c;
}
bigint operator / (bigint a,bigint b){
bigint c,sum;
c.len=a.len;
for(int i=a.len;i>=1;i--){
sum=sum*bigint("10")+bigint(a[i]);
while(sum>=b){
sum=sum-b;
c[i]++;
}
}
c.shift(c.len);
return c;
}
bigint operator >> (bigint a,int b){
bigint c;
c.len=a.len;
int num=0;
for(int i=a.len;i>=1;i--){
if(a[i]&1){
int now=((num*10+a[i])>>1)<<1;
c[i]=(num*10+a[i])>>1;
num=(num*10+a[i])-now;
}else{
c[i]=(num*10+a[i])>>1;
num=0;
}
}
c.shift(c.len);
return c;
}
int main(){
string s,t;
cin>>s>>t;
bigint a,b;
a=s,b=t;
bigint c;
bigint d=0;
bigint e=2;
bigint f=1;
while(true){
if(a.a[1]%2==0&&b.a[1]%2==0) a=a>>1,b=b>>1,f=f*e;
else if(a[1]%2==0&&(b[1]&1)) a=a>>1;
else if((a[1]&1)&&b[1]%2==0) b=b>>1;
else {
if(b>=a){
c=a;
a=b;
b=c;
}
c=a-b;
a=b;
b=c;
}
if(a==d||b==d) break;
}
a=a*f;
a.print();
return 0;
}
TLE了几个点(评测记录),求帮忙改一下
悬三关