60分 TLE了 求助
查看原帖
60分 TLE了 求助
775551
caojiaming楼主2022/11/20 10:40

我虽然用Python过了,但还是想问一下,C++做为什么2 7 8 10 点超时了 我还是用结构体做的 省了一些时间 求优化

#include <bits/stdc++.h>
using namespace std;

struct highoperation
{
	string a;
	string b;
	void tos(string &a,string &b)
	{
		if(a.length()<b.length())
		{
		    while(a.length()<b.length())
		    {
		        a="0"+a;
		    }
		}
		else
		{
		    while(b.length()<a.length())
		    {
		        b="0"+b;
		    }
		}
	}
	void delete_zero(string &a)
	{
		while(a[0]=='0')
		{
			if(a=="0")
			{
				return;
			}
			a.erase(0,1);
		}
	}
	char toc(int i)
	{
		return i+'0';
	}
	int toi(char c)
	{
		return c-'0';
	}
	int lar(string a,string b)
	{
		tos(a,b);
		if(a==b)
		{
			return 0;
		}
		if(a[0]>b[0])
		{
			return 1;
		}
		if(a[0]<b[0])
		{
			return -1;
		}
		a.erase(0,1);
		b.erase(0,1);
		return lar(a,b);
	}
	string add(string a,string b)
	{
		if(a[0]=='-'&&b[0]=='-')
		{
			a.erase(0,1);
			b.erase(0,1);
			return "-"+add(a,b);
		}
		if(a[0]=='-'&&b[0]!='-')
		{
			a.erase(0,1);
			return mis(b,a);
		}
		if(a[0]!='-'&&b[0]=='-')
		{
			a.erase(0,1);
			return mis(b,a);
		}
		tos(a,b);
		int l=a.length();
		bool flag=0;
		for(int i=l-1;i>=0;i--)
		{
			int d1=toi(a[i]);
			int d2=toi(b[i]);
			int d3=d1+d2;
			if(d3>=10)
			{
				d3-=10;
				if(i)
				{
					a[i-1]++;
				}
				else
				{
					flag=1;
				}
			}
			a[i]=(toc(d3));
		}
		return flag?("1"+a):a;
	}
	string mis(string a,string b)
	{
		if(a[0]=='-'&&b[0]=='-')
		{
			a.erase(0,1);
			b.erase(0,1);
			return mis(b,a);
		}
		if(a[0]!='-'&&b[0]=='-')
		{
			b.erase(0,1);
			return add(a,b);
		}
		if(a[0]=='-'&&b[0]!='-')
		{
			a.erase(0,1);
			return "-"+add(a,b);
		}
	    tos(a,b);
		int l=a.length();
		if(lar(b,a)>0)
		{
			return "-"+mis(b,a);
		}
		for(int i=l-1;i>=0;i--)
		{
			int d1=toi(a[i]);
			int d2=toi(b[i]);
			int d3=d1-d2;
			if(d3<0)
			{
				d3+=10;
				int j=i;
				bool flag=true;
				for(j=i;toi(a[j])==0;j--)
				{
					a[j]='9';
					flag=false;
				}
				a[j-flag]--;
			}
			a[i]=(toc(d3));
		}
		delete_zero(a);
		if(a=="")
		{
			return "0";
		}
		return a;
	}
	string mul(string a,string b)
	{
		int l=a.length(),l1=b.length();
		string ans="0";
		for(int i=l-1;i>=0;i--)
		{
			int d=toi(a[i]);
			string sum=b;
			for(int j=1;j<d;j++)
			{
				sum=add(sum,b);
			}
			if(d)
			{
			    ans=add(ans,sum);
			}
			b+="0";
		}
		return ans;
	}
	string mo;
	string hchu(string a,string b)
	{
		string ans="0";
		while(lar(a,b)>=0)//高精除(模)高精的思路
		{
			a=mis(a,b);
			ans=add(ans,"1");
		}
		mo=a;
		return ans;
	}
};
int main()
{
	highoperation p;
	cin>>p.a;
	cin>>p.b;
	cout<<p.add(p.a,p.b)<<"\n";
	cout<<p.mis(p.a,p.b)<<"\n";
	cout<<p.mul(p.a,p.b)<<"\n";
	cout<<p.hchu(p.a,p.b)<<"\n";
	cout<<p.mo;
	return 0;
}
2022/11/20 10:40
加载中...