80分求住
查看原帖
80分求住
1490289
zpx5201314楼主2024/10/2 16:12
#include <bits/stdc++.h>
using namespace std;
char a[1000005],b[1000005],c[1000005];
string s1,s2;
string add(string s1,string s2)
{
	memset(c,0,sizeof(c));
	memset(a,0,sizeof(c));
	memset(b,0,sizeof(c));
	int l1=s1.size(),l2=s2.size();
	for(int i=1;i<=s1.size();i++) a[l1-i+1]=s1[i-1]-'0';
	for(int i=1;i<=s2.size();i++) b[l2-i+1]=s2[i-1]-'0';
	int l=max(l1,l2)+1;
	for(int i=1;i<=l;i++)
	{
		c[i]+=a[i]+b[i];
		c[i+1]+=c[i]/10;
		c[i]%=10;
	}
	string ans="";
	if(c[l]==0&&l>1) l--;
	for(int i=l;i>=1;i--) ans+=char(c[i]+'0');
	return ans;
}
string pev(string s1,string s2)
{
	memset(a,0,sizeof(c));
	memset(b,0,sizeof(c));
	memset(c,0,sizeof(c));
	int l1=s1.size(),l2=s2.size();
	for(int i=1;i<=s1.size();i++) a[l1-i+1]=s1[i-1]-'0';
	for(int i=1;i<=s2.size();i++) b[l2-i+1]=s2[i-1]-'0';
	int l=max(l1,l2)+1;
	bool flag=(l1>l2) ? 1 : ((l1==l2) ? (s1>=s2) : 0);
	for(int i=1;i<=l;i++)
	{
		if(flag)c[i]+=a[i]-b[i];
		else c[i]+=b[i]-a[i];
		c[i+1]-=(c[i]<0);
		c[i]=(c[i]+10)%10;
	}
	if(c[l]==0&&l>1) l--;
	string ans="";
	if(!flag) ans+='-';
	while(c[l]==0&&l>1) l--;
	for(int i=l;i>=1;i--) ans+=char(c[i]+'0');
	return ans;
}
string sat(string s1,string s2)
{
	memset(a,0,sizeof(c));
	memset(b,0,sizeof(c));
	memset(c,0,sizeof(c));
	int l1=s1.size(),l2=s2.size();
	for(int i=1;i<=s1.size();i++) a[l1-i+1]=s1[i-1]-'0';
	for(int i=1;i<=s2.size();i++) b[l2-i+1]=s2[i-1]-'0';
	int l=l1+l2;
	for(int i=1;i<=l1;i++)
	{
		for(int j=1;j<=l2;j++)
		{
			c[i+j-1]+=a[i]*b[j];
			c[i+j]+=c[i+j-1]/10;
			c[i+j-1]%=10;
		}
	}
	while(c[l]==0&&l>1) l--;
	string ans="";
	for(int i=l;i>=1;i--) ans+=char(c[i]+'0');
	return ans;
}
bool f(string s1,string s2)
{
	int l1=s1.size(),l2=s2.size();
	return (l1>l2) ? 1 : ((l1==l2) ? (s1>s2) : 0);
}
struct node
{
	string root,fish;
	node(){};
	node(string root,string fish)
	{
		this->fish=fish;
		this->root=root;
	}
	void print()
	{
		cout<<root<<endl<<fish;
	}
};
node off(string s1,string s2)
{
	string answer="";
	int l=s1.size();
	string x="0";
	for(int d=1;d<=l;d++)
	{
		if(x!="0")x+=s1[d-1];
		else x=s1[d-1];
		int i=0;
		for(;i<=9;i++) if(f(sat(s2,to_string(i)) ,x)) break;
		i--;
		if(!answer.empty()||i!=0)answer+=to_string(i);
		x=pev(x,sat(s2,to_string(i)));
	}
	if(answer=="") answer="0";
	node _out(answer,x);
	return _out;
}
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>s1>>s2;
	cout<<add(s1,s2)<<endl<<pev(s1,s2)<<endl<<sat(s1,s2)<<endl;
	off(s1,s2).print();
	return 0;
}

TLE

2024/10/2 16:12
加载中...