高精除法写炸了!!!
查看原帖
高精除法写炸了!!!
941801
louie2011楼主2024/8/10 15:10
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n;
struct bigint
{
	int arr[30050],len;
	bigint()
	{
		len=0;
		for(int i=1;i<=30049;i++)
		{
			arr[i]=0;
		}
	}
	bigint(int x)
	{
		*this=x;
	}
	bigint operator =(bigint x)
	{
		len=x.len;
		for(int i=1;i<=len;i++)
		{
			arr[i]=x.arr[i];
		}
		return *this;
	}
	bigint operator =(int x)
	{
		int tmp=x;
		len=0;
		while(tmp)
		{
			len++;
			tmp/=10;
		}
		len=max(len,(long long)1);
		for(int i=len;i>=1;i--)
		{
			arr[i]=x%10;
			x/=10;
		}
		return *this;
	}
	bigint operator +(bigint x)
	{
		bigint ans;
		for(int i=1;i<=max(len,x.len);i++)
		{
			ans.arr[i]=arr[i]+x.arr[i];
		}
		for(int i=1;i<=max(len,x.len);i++)
		{
			ans.arr[i+1]+=ans.arr[i]/10;
			ans.arr[i]%=10;
		}
		ans.len=max(len,x.len);
		if(ans.arr[ans.len+1])
		{
			ans.len++;
		}
		return ans;
	}
	bigint operator *(bigint x)
	{
		bigint ans;
		for(int i=1;i<=len+x.len;i++)
		{
			for(int j=1;j<=x.len;j++)
			{
				ans.arr[i+j-1]+=arr[i]*x.arr[i];
			}
		}
		for(int i=1;i<=len+x.len;i++)
		{
			ans.arr[i+1]+=ans.arr[i]/10;
			ans.arr[i]%=10;
		}
		ans.len=len+x.len;
		for(int i=len;i>=1 && ans.arr[i]==0;i--)
		{
			ans.len--;
		}
		ans.len=max(ans.len,(long long)1);
		return ans;
	}
    bool operator <=(bigint x)
    {
    	if(len>x.len)
    	{
    		return 0;
		}
		if(len<x.len)
		{
			return 1;
		}
		for(int i=1;i<=len;i++)
		{
			if(arr[i]>x.arr[i])
			{
				return 0;
			}
		}
		return 1;
	}
    bool operator !=(bigint x)
    {
    	if(len!=x.len)
    	{
    		return 0;
		}
		for(int i=1;i<=len;i++)
		{
			if(arr[i]!=x.arr[i])
			{
				return 0;
			}
		}
		return 1;
	}
	bigint operator /(int x)
	{
		bigint ret;
		bigint tmp;
		for(int i=len;i>=1;i--)
		{
			tmp=tmp*(bigint)10;
			tmp=tmp+(bigint)arr[i];
			ret=ret*10;
			int cnt=0;
			for(bigint j=x;j<=tmp && j<=9;j=j+x)
			{
				cnt++;
			}
			ret=ret+cnt;
		}
		return ret;
	}
    
};
struct node
{
	int a,b;
	int pos;
};
node arr[1050];
bool cmp(node x,node y)
{
	if(x.a*x.b!=y.a*y.b)
	{
		return x.a*x.b<=y.a*y.b;
	}
	else
	{
		return x.pos<y.pos;
	}
}
bigint ans;
signed main()
{
	cin>>n;
	int tmp1,tmp2;
	cin>>tmp1>>tmp2;
	arr[0].a=tmp1,arr[0].b=tmp2;
	for(int i=1;i<=n;i++)
	{
		cin>>tmp1>>tmp2;
		arr[i].a=tmp1;
		arr[i].b=tmp2;
		arr[i].pos=i;
	}
	sort(arr+1,arr+1+n,cmp);
	bigint sum=arr[0].a;
	for(int i=1;i<=n;i++)
	{
//		cout<<arr[i].a<<" "<<arr[i].b<<endl;;
		if(ans<=sum/arr[i].b)
		{
			ans=sum/arr[i].b;
		}
		sum=sum*arr[i].a;
	}
	for(int i=1;i<=ans.len;i++)
	{
		cout<<ans.arr[i];
	}
	return 0;
}

返回值有问题,求debug

2024/8/10 15:10
加载中...