c++死因不明(T+W)
查看原帖
c++死因不明(T+W)
750137
WangNONO楼主2024/12/11 00:10
#include<bits/stdc++.h>
#define la aa.size()
#define lb bb.size()
#define al (int)(aa[(la)-1]-'0')
#define bl (int)(bb[(lb)-1]-'0')
#define debug(a,b) cerr<<a<<" "<<b<<"\n";
using namespace std;
const int N=1e5+5;

string s1,s2,ans;
int n,h,len,len1,len2,f,a[N],b[N],c[N],qwq;
int sstoi(string s)
{
	int x=0;char c;
	for(int i=0;i<s.size();i++)c=s[i],x=x*10+c-'0';
	return x;
}
string itos(int x)
{
	string s;
	while(x)
	{
		s=s+(char)(x%10+'0');
		x/=10;
	}
	return s;
}
string chu(string s,int x)
{
	ans="";
	len=s.size(),f=0;
	for(int i=0;i<len;i++)
	{
		h=f*10+(s[i]-'0');
		ans=ans+(char)((int)(h/x)+'0');
		f=h%x;
	}
	while(ans[0]=='0')ans.erase(ans.begin());
	return ans;
}
string cheng1(string s1,string s2) 
{
	ans="";
	len1=s1.size(),len2=s2.size();
	memset(a,0,sizeof(a));
	memset(b,0,sizeof(b));
	memset(c,0,sizeof(c));	
	for(int i=0;i<len1;i++)a[len1-i-1]=s1[i]-'0';
	for(int i=0;i<len2;i++)b[len2-i-1]=s2[i]-'0';
	for(int i=0;i<len1;i++)
		for(int j=0;j<len2;j++)
			c[i+j]+=a[i]*b[j];		
	int l=len1+len2-1;
	for(int i=0;i<l;i++)
	{
		c[i+1]+=c[i]/10; 
		c[i]%=10;
	}
	if(c[l]>0)l++; 
	while(c[l-1]>=10)
	{
		c[l]=c[l-1]/10;
		c[l-1]%=10;
		l++;
	}
	while(c[l-1]==0&&l>1)l--;
	for(int i=l-1;i>=0;i--)ans=ans+(char)(c[i]+'0');
	return ans;
}
string cheng(string s,int x)
{
	ans="";
	len=s.size(),f=0;
	for(int i=len-1;i>=0;i--)
	{
		h=f+x*((s[i]-'0'));
		ans=(char)((h%10)+'0')+ans;
		f=h/10;
	}
	if(f)ans=(char)(f+'0')+ans;
	return ans;
}
string jian(string s1,string s2)
{
	len1=s1.size(),len2=s2.size(),f=0;
	ans="";
	for(int i=len1-1,j=len2-1;i>=0&&j>=0;i--,j--)
	{
		h=s1[i]-s2[j]-f;
		if(h<0)h+=10,f=1;
		else f=0;
		ans=(char)(h+'0')+ans;
	}
	if(len1>len2)
	{
		for(int i=len1-len2-1;i>=0;i--)
		{
			h=s1[i]-'0'-f;
			if(h<0)h+=10,f=1;
			else f=0;
			ans=(char)(h+'0')+ans;
		}
	}
	else
	{
		for(int i=len2-len1-1;i>=0;i--)
		{
			h=s2[i]-'0'-f;
			if(h<0)h+=10,f=1;
			else f=0;
			ans=(char)(h+'0')+ans;
		}
	}
	while(ans[0]=='0')ans.erase(ans.begin());
	return ans;
}
bool operator==(string s1,string s2)
{
	if(s1.size()!=s2.size())return 0;
	for(int i=0;i<s1.size();i++)
		if(s1[i]!=s2[i])
			return 0;
	return 1;
}
bool operator<(string s1,string s2)
{
	if(s1.size()!=s2.size())return s1.size()<s2.size();
	for(int i=0;i<s1.size();i++)
		if(s1[i]!=s2[i])
			return s1[i]<s2[i];
	return 0;
}
string solve(string aa,string bb)
{
	int s=0;
	if(a<b)swap(a,b);
	while(!(al&1)&&!(bl&1)){++s;aa=chu(aa,2);bb=chu(bb,2);}
	while(!(aa==bb))
	{
		int ta=al&1,tb=bl&1;
		!ta?aa=chu(aa,2):(!tb?bb=chu(bb,2):aa=jian(aa,bb));
//		if(al%2==0&&bl%2==0)aa=chu(aa,2),bb=chu(bb,2),s=cheng(s,2);
//		else if(al%2==1&&bl%2==0)bb=chu(bb,2);
//		else if(al%2==0&&bl%2==1)aa=chu(aa,2);
//		else
//		{
//			if(la>lb||(la==lb&&aa>bb))aa=jian(aa,bb);
//			else bb=jian(bb,aa);
//		}
		if(aa<bb)swap(aa,bb);
		//debug(aa,bb);
	}
	while(s--)aa=cheng(aa,2);
	return aa;
}

int main()
{
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin>>s1>>s2;
	cout<<solve(s1,s2);
	return 0;
}
2024/12/11 00:10
加载中...