高精度乘法
vector<int>mul(vector<int> a,int b){
vector<int> c;int t =0;for(int i =0; i < a.size(); i ++){
t += a[i]* b;
c.push_back(t%10);
t /=10;}while(t){
c.push_back(t%10);
t /=10;}return c;// 乘出来的是 低位到高位}
高精度除法:
vector<int>div(vector<int> a,int b){
vector<int> c;int t=0;bool flag =false;// 用来去掉前导零 for(int i = a.size()-1; i >=0; i --)// 除法 从高位到低位 所以从后往前开始除{
t = t *10+ a[i];int x = t/b;if(flag || x){
flag =true;
c.push_back(x);}
t %= b;}// 算出来的是高位到低位 return vector<int>(c.rbegin(), c.rend());// 作用 就是 将c倒置 也可以用 reverse(c.begin(), c.end());}**两个vector 比较大小**
vector<int>max_vec(vector<int> a, vector<int> b){if(a.size()> b.size())return a;if(a.size()< b.size())return b;if(vector<int>(a.rbegin(), a.rend())> vector<int>(b.rbegin(), b.rend()))return a;return b;}**输出**voidoutpush(vector<int> a){for(int i = a.size()-1; i >=0; i --)
cout << a[i];
cout << endl;}**主函数**int main (){int n, a, b;
scanf ("%d",&n);for(int i =0; i <= n; i ++){
scanf ("%d%d",&a,&b);
arr[i]={a * b, a};}sort(arr +1, arr +1+ n);
vector<int>product(1,1);
vector<int>res(1,0);for(int i =0; i <= n; i ++){if(i) res =max_vec(res, div (product, arr[i].first/arr[i].second));
product =mul(product, arr[i].second);}outpush(res);return0;}