0pts求条 全TLE
查看原帖
0pts求条 全TLE
1426124
Zhangxm2012楼主2025/6/14 22:39
#include<bits/stdc++.h>
#define debug cout<<"here"
using namespace std;
const int Len=10004;
struct Int{
	string s;
	int num[Len+20];
	int len;
	void read(){
		cin>>s;
		len=s.size();
		for(int i=0;i<len;i++){
			num[len-i]=s[i]-'0';
		}	
	}
	void print(){
		for(int i=len;i>=1;i--){
			cout<<num[i];
		}
		cout<<'\n';
	}
	bool operator<(const Int&b)const{
		if(len!=b.len){
			return len<b.len;
		}
		for(int i=len;i>=1;i--){
			if(num[i]!=b.num[i]){
				return num[i]<b.num[i];
			}
		}
		return 0;
	}
	bool operator>=(const Int&b)const{
		return !((*this)<b);
	}
	Int operator-(const Int&b)const{
		Int c;
		int n=max(len,b.len);
		c.len=n;
		for(int i=1;i<=n;i++){
			c.num[i]+=num[i]-b.num[i];
			if(c.num[i]<0){
				c.num[i+1]-=1;
				c.num[i]+=10;
			}
		}
		for(int i=n;i>=2;i--){
			if(c.num[i]==0){
				c.len--;
			}
			else{
				break;
			}
		}
		return c;
	}
	Int operator*(const int&b)const{
		Int c;
		int n=len+20;
		c.len=n;
		for(int i=1;i<=n;i++){
			c.num[i]=num[i]*b;
		}
		for(int i=1;i<=n;i++){
			if(c.num[i]>=10){
				c.num[i+1]+=c.num[i]/10;
				c.num[i]%=10;
			}
		}
		for(int i=n;i>=2;i--){
			if(c.num[i]==0){
				c.len--;
			}
			else{
				break;
			}
		}
		return c;
	}
	Int operator/(const int&b)const{
		if(b==0){
			cerr<<"Error:Division by zero!"<<'\n';
			exit(3221225620);
		}
		Int c;
		int n=len,d=0;
		c.len=n;
		for(int i=n;i>=1;i--){
			d=d*10+num[i];
			c.num[i]=d/b;
			d%=b;
		}
		for(int i=n;i>=2;i--){
			if(c.num[i]==0){
				c.len--;
			}
			else{
				break;
			}
		}
		return c;
	}
	bool is_zero()const{
		return len==1&&num[1]==0;
	}
};
bool check(Int a,Int b){
	if(a.is_zero()||b.is_zero()){
		return 0;
	}
	return 1;
}
Int GCD(Int a,Int b){
	int cnt=0;
	while(check(a,b)){
		if(a.num[1]%2==0&&b.num[1]%2==0){
			a=a/2;
			b=b/2;
			cnt++;
		}
		else if(a.num[1]%2==0&&b.num[1]%2==1){
			a=a/2;
		}
		else if(a.num[1]%2==1&&b.num[1]%2==0){
			b=b/2;
		}
		else{
			if(a>=b){
				a=a-b;
			}
			else{
				b=b-a;
			}
		}
	}
	a=max(a,b);
	for(int i=1;i<=cnt;i++){
		a=a*2;
	}
	return a;
}
Int a,b,c;
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	a.read();
	b.read();
	GCD(a,b).print();
	return 0;
}
2025/6/14 22:39
加载中...