蒟蒻求助,这个高精哪里有问题?
查看原帖
蒟蒻求助,这个高精哪里有问题?
242490
lyc呐楼主2020/8/12 20:22
#include<bits/stdc++.h>
using namespace std;
long long l[500]={0};
long long base[500]={1};
long long ans[500]={0};
struct node{
	int l,r;
};
bool comp(node x,node y)
{
	return x.l*x.r<y.l*y.r;
}
void maxn(long long *ans,long long *l)	//大小判断 
{
	bool flag=false;
	int len1,len2;
	for(len1=499;ans[len1]==0;len1--);
	for(len2=499;l[len2]==0;len2--);
	if(len1<len2)
		flag=true;
	else if(len1==len2)
	{
		for(int i=len1;i>=0;i--)
			if(ans[i]<l[i])
				flag=true;
	}
	if(flag)
	{
		for(int i=0;i<500;i++)
			ans[i]=l[i];
	}
}	

void mul(int m)		//乘法 
{
	for(int i=0;i<500;i++)
		base[i]*=m;
	for(int i=0;i<499;i++)
		base[i+1]+=base[i]/10000000,base[i]%=10000000;	//压位 
}

void div(int m)		//除法 
{
	for(int i=0;i<500;i++)
		l[i]=base[i];
	int d;
	long long mid[500]={0};
	for(d=499;l[d]==0;d--);		//定位到数首 
	long long s;
	for(int i=d;i>=0;i--)
	{
		mid[i]=l[i]/m;
		if(mid[i]>0)
			l[i]-=mid[i]*m;
		if(i>0)
			l[i-1]+=l[i]*10000000;
	}
	for(int i=0;i<500;i++)
		l[i]=mid[i];
 } 
 

int main()
{
	int n;
	scanf("%d",&n);
	node dc[n+1];
	for(int i=0;i<=n;i++)
		scanf("%d%d",&dc[i].l,&dc[i].r);
	sort(dc+1,dc+n+1,comp);
	//运算 
	for(int i=1;i<=n;i++)
	{
		mul(dc[i-1].l);
		div(dc[i].r);
		maxn(ans,l);
	}
	//输出	
	int d;
	for(d=499;ans[d]==0&&d>=0;d--);
	bool flag=false;
	for(int i=d;i>=0;i--)
		printf("%lld",ans[i]),flag=true;	
	if(!flag)
		printf("0");	
}

Output:

2166489661101032350678866897536628698296804147316726878162441737980268621335310233327258927458239967674879428851028800069063620140885606400000000000000000

Your Output

21664896611010323506788668975366286982968041473167268781624417379802686213353102333272589274582399676748794288512880006906362140885606400000

2020/8/12 20:22
加载中...