贪心加高精度,不愿意写高精的同学们模板在这里
http://url.cn/QI87Hy。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
#define maxn 50000
int n,ans[100000],len;
struct node
{
int a,b,sum;
}save[11000];
bool cmp(node aa,node bb)
{
return aa.sum<bb.sum;
}
int lenth(int k)//求数字长度(位数)函数
{
int i=0;
while(k>0)
{
k/=10;
i++;
}
return i;
}
void chufa(int b)
{
int tmp=0;
for(int i=len;i>0;i--)
{
tmp=tmp*10+ans[i];
ans[i]=tmp/b;
tmp%=b;
}
while (ans[len]==0 && len>1) len--;
return;
}
int main()
{
scanf("%d",&n);
for(int i=0;i<=n;i++)
{
scanf("%d%d",&save[i].a,&save[i].b);
save[i].sum=save[i].a*save[i].b;
}
sort(save+1,save+1+n,cmp);
ans[1]=save[0].a;
for(int i=1;i<n;i++)
{
int c=0;
for(int j=1;j<=maxn;j++)
{
int s=save[i].a*ans[j]+c;
ans[j]=s%10;
c=s/10;
}
}
len=maxn;
for(;len>=1;len--)
{
if(ans[len])
break;
}
int ll=lenth(save[n].b);
if(len<ll)
{
printf("1\n");
exit(0);
}
chufa(save[n].b);
for(int i=len;i>=1;i--)
{
printf("%d",ans[i]);
}
return 0;
}