求助,不用高精60,用了变10分
查看原帖
求助,不用高精60,用了变10分
649304
封禁用户楼主2022/10/10 11:07

改了很久一直过不了,求大佬们调下代码。

#include<bits/stdc++.h>
using namespace std;
struct asd{
	int a,b;
}a[1009];
inline bool aaa(asd a,asd b)
{
	return a.a*a.b<b.a*b.b;
}
inline void szz(int a[],string &b)
{
	int s=0;b="";
	char c;
	for(int i=10000;i>=1;--i)
	{
		c=a[i]+'0';
		if(a[i]!=0)
		s=1;
		if(s)
		b=c+b;
	}
	return ;
}
inline void zzs(int a[],string b)
{
	int l=b.size();
	for(int i=0;i<l;++i)
	a[l-i]=b[i]-'0';
	return ;
}
inline void qqq(int a,string &b)
{
	char c;b="";
	while(a!=0)
	c=a%10+'0',b=c+b,a/=10;
}
inline void cheng(string a,string b,int c[])
{
	int x[10009],y[10009],l1=a.size(),l2=b.size();
	zzs(x,a),zzs(y,b);
	for(int i=1;i<=l1;++i)
	for(int j=1;j<=l2;++j)
	c[i+j-1]=x[i]*y[j];
	for(int i=1;i<=l1+l2+1;++i)
	c[i+1]=c[i]/10,c[i]=c[i]%10;
//	printf("qq%d %d %d\n",x[1],y[1],c[1]);
	return ;
}
void chu(int a[],int b)
{
	int s=0,y=0;
	for(int i=10000;i>=1;--i)
	{
		if(a[i]!=0)
		s=1;
		if(s)
		{
			a[i]+=y*10;
			y=a[i]%b,a[i]/=b;
		}
	}
	return ;
}
int n,s[10009],as;
string x,y;
int main()
{
	s[1]=1;
	cin>>n;
	for(int i=0;i<=n;++i)
	cin>>a[i].a>>a[i].b;
	sort(a+1,a+1+n,aaa);
	for(int i=1;i<=n;++i)
	{
		szz(s,x),qqq(a[i-1].a,y);
		cheng(x,y,s);
//		cout<<x<<" "<<y<<" "<<s[1]<<endl;
	}
	chu(s,a[n].b);
//	cout<<s[1]<<" "<<a[n].b<<endl;
	for(int i=10000;i>=1;--i)
	{
		if(s[i]!=0)
		as=1;
		if(as)
		cout<<s[i];
	}
	return 0;
}
2022/10/10 11:07
加载中...