1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 const int maxn=100007; 7 const int maxm=200007; 8 int a[maxn],b[maxn]; 9 int ans[maxm*10]; 10 int now,num,l=1; 11 void multi(int x){ 12 for(int i=1;i<=l;i++) ans[i]*=a[x];//1~l 低位到高位 13 for(int i=1;i<=l;i++){ 14 ans[i+1]+=(ans[i]/10); 15 ans[i]%=10; 16 } 17 l++; 18 while(ans[l]>9) 19 { 20 ans[l+1]+=(ans[l]/10); 21 ans[l]%=10; 22 l++; 23 }//if(ans[l+1]>0) l++;这样是错的,因为ans[l]可能很大 24 } 25 void divis(int x){ 26 for(int i=l;i>=1;i--){ 27 ans[i-1]+=((ans[i]%b[x])*10); 28 ans[i]/=b[x]; 29 } 30 while(ans[l]==0) l--; 31 if(l==0) cout<<1<<endl; 32 } 33 int main(){ 34 int n;cin>>n; 35 cin>>a[0]>>b[0]; 36 for(int i=1;i<=n;i++){ 37 cin>>a[i]>>b[i]; 38 } 39 int aa=0,bb=0; 40 for(int i=1;i<=n;i++){ 41 if(a[i]*b[i]>aa){ 42 aa=a[i]*b[i]; 43 bb=i; 44 } 45 } 46 l=1; 47 ans[1]=a[0]; 48 for(int i=1;i<=n;i++) 49 if(i!=bb) multi(i); 50 divis(bb); 51 for(int i=l;i>=1;i--) cout<<ans[i]; 52 cout<<endl; 53 return 0; 54 }
原文:https://www.cnblogs.com/lcan/p/9495275.html