为啥压8位还是T了两个点,我不理解
#include<bits/stdc++.h>
using namespace std;
const int M=1e8;
struct bignum{
int len;
long long d[1255];
bignum(){
len=1;
memset(d,0,sizeof(d));
}
void read(){
string s;
cin>>s;
len=0;
int k=M,l=s.size();
for(int i=1;i<=l;i++,k*=10){
if(k==M) k=1,len++;
d[len]+=(s[l-i]-'0')*k;
}
}
void write(){
cout<<d[len];
for(int i=len-1;i>=1;i--){
printf("%0.8d",d[i]);
}
cout<<endl;
}
};
bignum operator - (bignum x,bignum y){
bignum ans;
ans.len=max(x.len,y.len);
for(int i=1;i<=ans.len;i++){
ans.d[i]+=x.d[i]-y.d[i];
if(ans.d[i]<0) ans.d[i+1]--,ans.d[i]+=M;
}
while(ans.len>1&&(!ans.d[ans.len])) ans.len--;
return ans;
}
bignum operator * (bignum x,bignum y){
bignum z;
z.len=x.len+y.len-1;
for(int i=1;i<=x.len;i++){
for(int j=1;j<=y.len;j++){
z.d[i+j-1]+=x.d[i]*y.d[j];
z.d[i+j]+=z.d[i+j-1]/M;
z.d[i+j-1]%=M;
}
}
if(z.d[z.len+1]!=0) z.len++;
while(z.len>1&&z.d[z.len]==0) z.len--;
return z;
}
bignum operator / (bignum x,int y){
bignum res;
res.len=x.len;
long long t=0;
for(int i=res.len;i>=1;i--){
t=t*M+x.d[i];
res.d[i]=t/y;
t=t%y;
}
while(res.len>1&&res.d[res.len]==0) res.len--;
return res;
}
char max(bignum a,bignum b){
if(a.len>b.len) return 'a';
else if(a.len<b.len) return 'b';
for(int i=a.len;i>=1;i--){
if(a.d[i]<b.d[i]) return 'b';
if(b.d[i]<a.d[i]) return 'a';
}
return 'a';
}
int main(){
bignum a,b;
a.read();
b.read();
// a.write();
// cout<<' ';
// b.write();
// cout<<endl;
int cnt=0;
while(!(a.len==1&&a.d[1]==0)&&!(b.len==1&&b.d[1]==0)){
if((a.d[1]==0||a.d[1]==2||a.d[1]==4||a.d[1]==6||a.d[1]==8)&&(b.d[1]==0||b.d[1]==2||b.d[1]==4||b.d[1]==6||b.d[1]==8)){
cnt++;
a=a/2;
b=b/2;
// a.write();
// cout<<' ';
// b.write();
// cout<<endl;
continue;
}
else if((a.d[1]==0||a.d[1]==2||a.d[1]==4||a.d[1]==6||a.d[1]==8)&&(b.d[1]==1||b.d[1]==3||b.d[1]==5||b.d[1]==6||b.d[1]==9)){
a=a/2;
// a.write();
// cout<<' ';
// b.write();
// cout<<endl;
continue;
}
else if((b.d[1]==0||b.d[1]==2||b.d[1]==4||b.d[1]==6||b.d[1]==8)&&(a.d[1]==1||a.d[1]==3||a.d[1]==5||a.d[1]==6||a.d[1]==9)){
b=b/2;
// a.write();
// cout<<' ';
// b.write();
// cout<<endl;
continue;
}
else if(max(a,b)=='a'){
a=a-b;
// a.write();
// cout<<' ';
// b.write();
// cout<<endl;
continue;
}
else{
b=b-a;
// a.write();
// cout<<' ';
// b.write();
// cout<<endl;
continue;
}
}
// cout<<"cnt="<<cnt<<endl;
bignum two;
two.d[1]=2;
if(a.len==1&&a.d[1]==0){
for(int i=1;i<=cnt;i++){
b=b*two;
}
b.write();
return 0;
}
else{
for(int i=1;i<=cnt;i++){
a=a*two;
}
a.write();
return 0;
}
return 0;
}