题意:给出几个数,将这几个数组合成两个不为0的数,使这两个数的乘积最小,并且输出这个乘积。
题解:找到这几个数中不为0的最小的那个数,剩下的数组合成另外一个尽量小的数,在进行乘法运算的时候使用高精度的乘法。
代码如下:
#include<iostream>
#include<cmath>
#include<algorithm>
#include<vector>
#include<string>
using namespace std;
const int N=1e5+7;
int a[N];
vector<int> mul(vector<int> &A,int b)
{vector<int> C;int t=0;for(int i=0;i<A.size()||t;i++){if(i<A.size()) t+=A[i]*b;C.push_back(t%10);t /=10;}while(C.size()>1&&C.back()==0) C.pop_back();return C;
}
int main( )
{int t;cin>>t;while(t--){int n;cin>>n;string s;vector<int> A;for(int i=0;i<n;i++)cin>>a[i];sort(a,a+n);int pos=0;for(int i=0;i<n;i++){if(a[i]==0)pos++;}int b=a[pos];swap(a[pos],a[0]);swap(a[pos+1],a[1]);for(int i=n-1;i>=1;i--)A.push_back(a[i]);auto C=mul(A,b);for(int i=C.size()-1;i>=0;i--)cout<<C[i];cout<<endl;}return 0;
}