WA第3个测试点???
查看原帖
WA第3个测试点???
88733
Zekrom楼主2019/2/18 22:23
#include<iostream>
#include<cstdio>
#include<cstring> 
using namespace std;

char s[10010];

struct BIGNUM{
	int len,num[10010];
	BIGNUM(){len=1;memset(num,0,sizeof(num));}
	BIGNUM operator =(char *s){
		len=strlen(s);
		for(int i=0;i<len;i++)
			num[i]=s[len-i-1]-'0';
		return *this;
	} 
	BIGNUM operator -(BIGNUM s1)const{
		BIGNUM tmp;
		tmp.len=len;
		for(int i=0;i<len;i++)
		{
			tmp.num[i]+=num[i]-s1.num[i];
			while(tmp.num[i]<0)
			{
				tmp.num[i]+=10;
				tmp.num[i+1]--;
			}
		}
		while(tmp.num[tmp.len-1]==0&&tmp.len>1)
			tmp.len--;
		return tmp;
	}
	void print()
	{
		for(int i=len-1;i>=0;i--)
			printf("%d",num[i]);
		printf("\n"); 
	}
	bool operator ==(BIGNUM s1)const{
		if(s1.len!=len)return false;
		for(int i=0;i<len;i++)
			if(num[i]!=s1.num[i])return false;
		return true;
	}
	bool operator <(BIGNUM s1)const{
		if(len>s1.len)return false;
		if(len<s1.len)return true;
		for(int i=len-1;i>=0;i--) 
		{
			if(s1.num[i]!=num[i])return num[i]<s1.num[i];
		}
		return false;
	} 
	void mul(){
		for(int i=0;i<=len-1;i++)
		{
			num[i]*=2;
			num[i+1]+=num[i]/10;
			num[i]%=10; 
		}
		len++;
		while(num[len-1]==0&&len>1)len--;
	}
	void div(){
		for(int i=len-1;i>=1;i--)
		{
			num[i-1]+=(num[i]%2)*10;
			num[i]/=2;
		}
		num[0]/=2;
		while(num[len-1]==0&&len>1)len--;
	} 
	BIGNUM operator *(BIGNUM s1)const{
		BIGNUM tmp;
		tmp.len=len+s1.len;
		for(int i=0;i<len;i++)
		{
			for(int j=0;j<s1.len;j++)
			{
				tmp.num[i+j]+=num[i]*s1.num[j];
				tmp.num[i+j+1]+=tmp.num[i+j]/10;
				tmp.num[i+j]%=10;
			}
		}	
		while(tmp.num[tmp.len-1]==0&&tmp.len>1)tmp.len--;
		return tmp;
	}
	bool odd(){
		return num[0]&1;
	}
}a,b,ans; 

int main()
{
//	freopen("data.in","r",stdin);
	//freopen("wrong.out","w",stdout); 
	cin>>s;	a=s;
	cin>>s;  b=s;
	ans.num[0]=1;
	//printf("%d\n",a.len);
	//a.print();
	//b.print(); 
	while(!(a==b))
	{
		if(!a.odd()&&!b.odd())
			a.div(),b.div(),ans.mul();
		else if(!a.odd())
			a.div();
		else if(!b.odd())
			b.div();
		else  
		if(a<b)
			b=b-a;
		else 
			a=a-b;
	}
	a=a*ans;
	a.print();
	return 0;
}

2019/2/18 22:23
加载中...